从给定的大型列表计算整数的索引,该大型列表的删除不会影响列表的平均值
我尝试了线性时间方法,但是它似乎无法通过数字大于10 ^ 9且列表大小超过10 ^ 5的测试用例。 请提出一些更好的方法来解决此问题(如果有的话),或者提出一种更有效的方法来汇总具有大值的大型列表。 这是我的代码如下:
for _ in range(int(input())):
n=int(input())
#ar=list(map(int,input().split()))
ar=[int(x) for x in input().split()]
me=sum(ar)/n
for j in range(n):
#arr2=deepcopy(ar)
arr2=ar[:]
#arr2=[]
#for _ in ar:
# arr2.append(_)
arr2.remove(ar[j])
if (sum(arr2)/(n-1))==me:
print(j+1)
break
else:
print("Impossible")
在10个测试案例中,有两个代码失败,只是因为列表的len和整数大小的增加
答案 0 :(得分:2)
您似乎在每次迭代中都会对整个数组进行深层复制,这很昂贵。为什么不检查项目是否等于均值?
for _ in range(int(input())):
n = int(input())
ar = [int(x) for x in input().split()]
mean = sum(ar) / n
found = False
for j in range(n):
if ar[j] == mean:
print(j, " is the result.")
found = True
break
if not found:
print("Impossible")
答案 1 :(得分:0)
这看起来更像是数学问题,而不是算法挑战:
假设mean = sum(list)/len(list)
,我们需要一个值k
使得:
mean = (sum(list)-k)/(len(list)-1)
一些代数告诉我们的是:
k = sum(list) - mean * (len(list)-1)
k = sum(list) - mean * len(list) + mean
k = sum(list) - sum(list) + mean <-- because mean*len(list) = sum(list)
k = mean
例如:
a = [1,2,3,4,5,6,7]
k = sum(a)/len(a) # 4
ik = a.index(k) # 3