码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 最大子序和

时间:2018-12-26 14:30:25      阅读:452      评论:0      收藏:0      [点我收藏+]

标签:负数   比较   直接   class   pre   sub   遇到   span   分析   

这道题目是紫书上的经典题目,位于分治那一部分前后,再做这题依然觉得很巧妙。

分析:1.要明白的是,使用的是连续的一段,如果我统计i到j的和为负数,那肯定要舍去,因为他会对后面的答案有负面的作用,还不如不买,也就是将当前统计的区间和归零。

   2.我们确实会遇到中间连续的一段可能存在负数,区间的和下降的情况。但是只要他还是大于0即可,我们每次加上一个数,区间的和仍然大于0,则和答案比较一下看谁大,如果比答案大则更新一下。

   3.上面两种情况一直建立在和大于0的情况,极端情况下如果全部都小于0呢?题目要求必须选一个,肯定要选负数中最大那个。可以采取特判的方法,也可以直接将答案从int的最小值开始更新。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if(nums.size() == 0)
            return 0;
        int ans = -0x7fffffff;//再-1才是最小的,即0x80000000
        for(int i = 0, sum = 0; i < nums.size(); ++i) {
            sum += nums[i];
            if(sum > ans)
                ans = sum;
            if(sum < 0)
                sum = 0;
        }
        return ans;
    }
};

 

Leetcode 最大子序和

标签:负数   比较   直接   class   pre   sub   遇到   span   分析   

原文地址:https://www.cnblogs.com/llzhh/p/10178879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!