"""
题目:输入一个整数数组,如果一个数字左边的子数组之和等于右边的字数组之和,那么返回该数字的下标。如果存在多个这样的数字,则返回最左边数字的下标。
如果不存在这样的数字,则返回-1.例如数组[1, 7, 3, 6, 2, 9]中,数字6左边的3个数字1、7、3的和与右边的2个数字2、9的和相等,
因此输出数字6的下标3
解答思路:我的直觉思路是逐个扫描元素,然后使用切片求它两边的和。但是书上有更好的方法,即元素右边的子数组得到和等于数组总和减去左边子数组的和以及
该元素。这样就能够减少计算的次数了,因为如果每次都算元素右边切片的和,意味着每次都要生成一个子列表,而且要逐个迭代来求这个子列表的和。
"""
def left_is_right(t):
summary = sum(t)
for i in range(len(t)):
left_summary = sum(t[0:i])
right_summary = summary-left_summary-t[i]
if left_summary == right_summary:
return i
return -1
t = [1, 7, 3, 6, 2, 9]
s = [1, 7, 9, 6, 2, 9]
print(left_is_right(t))
print(left_is_right(s))
《剑指offer》面试题12:左右两边子数组的和相等
最新推荐文章于 2023-12-19 18:22:16 发布