首页 > 解决方案 > python中一个大列表的总和

问题描述

从给定的大列表中计算整数的索引,其删除不会影响列表的平均值

我尝试过线性时间方法,但它似乎无法通过数字超过 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 和整数的大小增加

标签: pythonpython-3.xalgorithmoptimization

解决方案


您似乎在每次迭代中都对整个数组进行了深层复制,这很昂贵。为什么不只检查一个项目是否等于平均值​​?

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")

推荐阅读