《剑指offer》面试题12:左右两边子数组的和相等

"""
题目:输入一个整数数组,如果一个数字左边的子数组之和等于右边的字数组之和,那么返回该数字的下标。如果存在多个这样的数字,则返回最左边数字的下标。
     如果不存在这样的数字,则返回-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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>