我的阵列等边算法出乎意料

时间:2019-05-24 15:19:34

标签: algorithm python-2.7

给定一个数组,找到一个索引N,其中N左边的整数之和等于N右边整数的总和。如果没有索引可以实现,则返回-1 。我得到了意外的结果。

我尝试了不同的枚举方法,但是某些特殊情况给我带来了麻烦。

def find_even_index(nums):
    total = sum(nums)
    if total%2 != 0:    
        return -1
    total /= 2
    L = 0
    for i, v in enumerate(nums):
        L += v
        if L == total:
            return i
        if L > total:  
            break     
    return i

测试用例1 :[10,-80,10,10,15,35,20]应该为6,但返回0
测试用例2 :范围(1,100)应为-1,但返回69
测试用例3 :[-1,-2,-3,-4,-3,-2,-1]应该给出3,但返回0

3 个答案:

答案 0 :(得分:0)

我的解决方法是:

withContext(IO)

我使用了部分和算法。它的工作原理是:您计算从0到索引X的总和。然后,您可以知道任何一对索引(i,j)之间的总和。

答案 1 :(得分:0)

def find_even_index(nums):
    if sum(nums) % 2:    
        return -1
    for i in range(len(nums)):
        left = sum(nums[:i])
        right = sum(nums[i+1:])
        if left == right:
          break
    else:
      return -1
    return i

print(find_even_index([10,-80,10,10,15,35,20]))
print(find_even_index(range(1,100)))
print(find_even_index([-1,-2,-3,-4,-3,-2,-1]))

结果:

6
-1
3

答案 2 :(得分:0)

我只是遍历数组的范围。

def find_even_index(nums):
    for i in range(len(arr)):
        if sum(arr[:i]) == sum(arr[i+1:]):
            return i
    return -1