题解 | #获得最多的奖金#

获得最多的奖金

https://www.nowcoder.com/practice/247f7bd088764aefa7474cff27489095

利用双指针,可以看作是从两边分别求前缀和和后缀和,如果值相等就赋给结果res,如果左边大,就让右指针前进一步,同理,又变大,就让左指针前进一步。由于中间必须留至少一个红包,所以结束条件就是left + 1 <= right

while True:
    try:
        n = int(input())
        nums = list(map(int, input().split()))

        left, right = 0, n - 1
        res = 0
        tmp_left, tmp_right = nums[0], nums[n - 1]

        while left + 1 <= right:

            if tmp_left == tmp_right:
                res = tmp_left
                left += 1
                right -= 1
                tmp_left += nums[left]
                tmp_right += nums[right]
            elif tmp_left > tmp_right:
                right -= 1
                tmp_right += nums[right]
            else:
                left += 1
                tmp_left += nums[left]
        print(res)

    except:
        break    

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
05-27 11:41
已编辑
点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务