gpt4 book ai didi

python - 移动使数组中的所有元素在 Python 中相等

转载 作者:行者123 更新时间:2023-12-03 20:40:44 24 4
gpt4 key购买 nike

我遇到了一个问题,其中输入如下:

5
1 1 1 1 6
预期输出为 4
基本上我们要做的是打印使所有 5 个值彼此相等所需的最小移动次数。一次移动意味着减少一个位置并增加另一个位置。如果不可能使它们全部相等,我们打印-1。
我尝试了以下方法:
def solution(N, W):
counter=0
W.sort()
k=W[int(N/2)]
for i in range(0,N):
counter=counter+abs(W[i]-k)

if N%2==0:
tempC=0
k=W[int(N/2)-1]

for i in range(0,N):
tempC=tempC+abs(A[i]-k)

counter=min(counter,tempC)

return counter
并且得到 5 作为答案。请分享您实现这一目标的功能。

最佳答案

让我们看看逻辑如何处理您的输入。

5 1 1 1 1 6
1. 1 2 1 3 3这种情况可能,最后它显示如下 2 2 2 2 2 .我们从这个结果中得到了什么 Sum(INITAL_LIST) is equal to SUM(FINAL_LIST) , 这是 1st condition ,如果这种保持模式是可能的。
2. 其中 index-value他们中的一些人会留下一些值(value)。 one-index的减量和 another-index 的增量被视为一步,因此我们将只考虑递减情况。离去的人终于变成等于 2 .所以 total-step等于一些递减的索引值。
这里我使用了 numpy 的矢量化属性以便于操作。
代码:
import numpy as np

def solution(N, W):
if sum(W)%N !=0:
return -1

eq = sum(W)//N
step = np.array(W)-eq
step_sum = np.sum(step[step>0])
return step_sum


if __name__ == '__main__':
var_, list_ = input().split(maxsplit=1)
print(solution(int(var_), list(int(i) for i in list_.split())))
没有 NUMPY:
更新:
step = np.array(W)-eq
step_sum = np.sum(step[step>0])
致:
step = [i-eq for i in W]
step_sum = sum(i for i in step if i>0)
输出:
5 1 1 1 1 6
4

关于python - 移动使数组中的所有元素在 Python 中相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67240602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com