leetcode-53.最大子序和

最大子序和

 1.题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
 2.分析:首先是整数数组,那么就要想明白一个问题,只要两个数加起来小于0了,那么不管后面怎么样,只要加上这个小于0的树,那么绝对会使最后的和变小,那么所以只要小于零了,那么他就不能放到最大子序和里了。当然有一种特殊情况,就是所有和都是负数,当然这时候只要保留住最大非负值就可以了。
 3.代码:

class Solution {
    public int maxSubArray(int[] nums) {
        //最大子序和  
        int max = nums[0];
        //当前子序和
        int presentSum = 0;
        for (int i = 0; i < nums.length; i++) {
            //当presentSum小于0时,没必要再往后加了,因为后面的不管是怎样
            //加了个负数就是变小的,直接切断当前子序,让其从当前位置往后加形成新的字串
            if (presentSum < 0) {
                presentSum = nums[i];
            } else {
                presentSum += nums[i]; 
            }
            //每次循环都要和当前保留的最大子序和比较,哪怕其是非负。
            max = Math.max(max, presentSum);
        }
        return max;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容