Coderwars:Maximum subarray sum(最大子数组和)

Maximum subarray sum(最大子数组和)

1.问题描述

The maximum sum subarray problem consists in finding the maximum sum of a contiguous subsequence in an array or list of integers:
意思是:在一个数组中找到一个连续的子数组,这个子数组必须是这个数组里所有子数组和最大的,返回找到的子数组的和
tips:

  • 上面提示我们两点
  1. 空数组也返回0
  2. 全为负数的数组,结果也返回0
2.解题思路
  1. 使用两个辅助变量,一个maximum保存当前和最大的结果, temp来遍历这个数组, 题目说了如果最后的结果是负数,则用0代替返回, 所以我们默认当前最大的和就是0 即
int maximum = 0;
int tmp = 0;
  1. 接下来我们从0开始遍历整个数组, 我们每次使用tmp+当前遍历的元素(假设当前元素为arr[i], 如果tmp+arr[i] < 0, 我们直接将tmp恢复为0, 然后更新maximum的值, 这里tmp恢复为0的意义就是前面的结果已经是负数了,所有我们的可能找到最大值的子数组一定不包括前面已经遍历过得元素, 所以我们子数组的起始索引只能从下一个遍历到的元素开始算起, 这样当遍历完整个数组后, 最大子数组和也就得到了,即使整个数组是负数,最后我们也能顺利返回0,不必考虑什么特殊情况
 
            int maximum = 0;
            int tmp = 0;
            for (int i : arr) {
                tmp += i;
                if (tmp < 0) {
                    tmp = 0;
                }
                maximum = Math.max(maximum, tmp);
            }
            return maximum;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值