我一直在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
答案 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]吗?