列表Python中的最小和最大和

时间:2019-03-16 06:07:53

标签: python arrays python-3.x

我一直在HackerRank上遇到问题,以涉足解决Python问题的机会,尽管我很乐于解决一些问题,但一个问题困扰着我。

这个问题是Mini-Max总和,它需要输入( arr ); 5个整数的数组,并通过 miniMaxSum(arr)

以下一行格式显示arr中最大和最小4个整数的和

最大最小

例如miniMaxSum(1、2、3、4、5)

10 14

我已经做了一些您可以在下面找到的与此相关的工作,并且大多数示例返回了所需的结果,但是我刚刚发现它不适用于arr = (5、5、5、5、5)。我怀疑这是因为最大值与列表中的另一个值相同时(例如arr = 1、2、3、4、4),或者最小值也是如此(例如arr = 1、1、3、4、5) ,我的代码就失败了,因为它不依赖于任何与arr的最大值或最小值相同的值。如果有帮助,则HackerRank错误消息为“ 错误答案”。

批评并提出改进建议,使其适用于任何由5个整数组成的数组(例如(5,5,5,5,5))。我很想了解这是如何工作的,非常感谢您的帮助。预先感谢!

constructor

8 个答案:

答案 0 :(得分:5)

由于这是一个很小的列表,所以我只对它进行排序,然后选择前5个,然后选择后5个,分别取它们的总和。

def miniMaxSum(arr):
  arr_sorted = sorted(arr)
  return sum(arr_sorted[:4]), sum(arr_sorted[-4:])

print(miniMaxSum([1,2,3,4,5]))
print(miniMaxSum([5,5,5,5,5]))

输出:

>>> print(miniMaxSum([1,2,3,4,5]))
(10, 14)
>>> print(miniMaxSum([5,5,5,5,5]))
(20, 20)

答案 1 :(得分:5)

尝试取总和并减去最小值或最大值:

def maxnum (x):
    return sum(x) - min(x)
def minnum(x):
    return sum(x) - max(x)

a = list(range(5))
b = [5]*5
print (a)
print (maxnum(a), minnum(a))
print (b)
print (maxnum(b), minnum(b))

输出:

[0,1,2,3,4]

10 6

[5、5、5、5、5]

20 20

答案 2 :(得分:0)

#!/bin/python3
# Complete the miniMaxSum function below.
def miniMaxSum(arr):
   arr=sorted(arr)
   s = sum(arr)
   print(s-arr[-1],s-arr[0])

答案 3 :(得分:0)

我认为此解决方案将对问题的所有测试案例都很方便。  因此,请尝试并运行。

def miniMaxSum(arr):

    max_elem = max(arr)
    min_elem = min(arr)

    mini = arr.copy()
    mini.remove(max_elem)

    maxi = arr.copy()
    maxi.remove(min_elem)

    sum_min = sum(mini)
    sum_max = sum(maxi)

    print(sum_min, sum_max)

if __name__ == '__main__':
    arr = list(map(int, input().rstrip().split()))
    miniMaxSum(arr)

答案 4 :(得分:0)

它不适用于边缘情况数组,例如[5,5,5,5,5],因为当程序尝试选择'listmax'和'listmin'时,程序会发现自己处于唯一位置“数字”既不大于也不小于max(arr)。您可以尝试在将每个索引与最大值进行比较时添加一个条件,这样您就不会错过重复最大值/最小值的情况。

我去计算所有和,然后选择最小值和最大值。希望以下代码对您有所帮助:

 def miniMaxSum(arr):
        sum_all = [] #list of sums of all the 4 elements
        temp = arr
        for i in range(5):
            p = temp.pop(i) #popping out an element to get an array of 4 elements 
            sum_all.append(sum(temp)) #calculating sum of all 4 elements
            temp.insert(i,p) #reset the list
        s_max = max(sum_all)
        s_min = min(sum_all)
        print(s_min , s_max) #prints the min and max of all the sums

答案 5 :(得分:0)

纯逻辑-

def miniMaxSum(arr):
    sums=[]
    s=0
    for i in range(len(arr)):
        for j in range(len(arr)):
            s += arr[j] # suming all
        s = s-arr[i]
# remove current position value because u need sum of (size-1)
        sums.append(s)
        s=0
    low=high=sums[1] #assign first value for comparison
    for i in range(len(sums)):
        if low > sums[i]:
            low = sums[i]
        if high < sums[i]:
            high =sums[i]
    print(low,high)

我不使用关键字short,sum。所有测试用例都完成了,答案-

Test case 0
Test case 1
Test case 2
Test case 3
Test case 4
Test case 5
Test case 6
Test case 7
Test case 8
Test case 9
Test case 10
Test case 11
Test case 12
Test case 13
Test case 14
Compiler Message
Success
Input (stdin)

1 2 3 4 5
Expected Output

10 14

答案 6 :(得分:-1)

我喜欢Ruslan的想法,即求和然后减去最小值或最大值以获得每个答案。但是,我们可以使用一个循环来完成所有操作,而不是使用3个循环(一个用于求和,一个用于最小,一个用于最大)-

from math import inf

def minimum (a, b):
  return a if a < b else b

def maximum (a, b):
  return a if a > b else b

def minmaxsum (*xs):
  min = inf
  max = -inf
  sum = 0
  for x in xs:
    min = minimum (min, x)
    max = maximum (max, x)
    sum = sum + x
  return (sum - max, sum - min)

print (minmaxsum (1, 3, 5, 7, 9))
# (16, 24)

print (minmaxsum (1, 2, 3, 4, 5))
# (10, 14)

答案 7 :(得分:-1)

def miniMaxSum(a):   
    max = sum(list(filter(lambda x: x<max(a) if a.count(max(a))==1 else x<=max(a),a)))
    min = sum(list(filter(lambda x: x>min(a) if a.count(min(a))==1 else x>=min(a),a)))
    print(min,max)

这可能会有所帮助,如果没有,您可以在输入为[1,1,2,3,4]或[1,2,3,4,4]或[5,5, 5,5,5]吗?