给定一个数组,找到一个索引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
答案 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