题解 | #连续子数组的最大和#

连续子数组的最大和

http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484

采用贪心算法,对于一个数组,要得到子数组的最大和,应该将所有可能的子数组的和求出来,然后比较:
对于所有的子数组,他们之间应该没有重合的元素,因为一旦有重合的元素,就可以将两个子数组合并,得到一个更大的子数组,而子数组之间的界限就应该是子数组的累加和,当累加和小于0,就应该到了下一个子数组。因为这个性质,就可以使用贪心算法来求解。我们可以用一个元素来记录子数组的最大值,这样只需要遍历一次,便可以求出最终的解。

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        vector<int> nums;
        int tmp=0,max=INT_MIN;
        for(int n:array){
            tmp+=n;
            if(tmp>max)
                max = tmp;
            if(tmp<0)
                tmp=0;
        }
        return max;
    }
};

tmp用于记录当前子数组的和,只要tmp大于0,说明当前的的子数组还有可能称为最大的子数组,当tmp小于0,表面这个子数组结果肯定不是我们想要的,因此设置tmp=0,表示从新再找一个子数组,同时max用于记录子数组最大值,。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务