LeetCode: Maximim SubArray

来源:互联网 发布:萨德事件 知乎 编辑:程序博客网 时间:2024/05/21 23:00

https://leetcode.com/problems/maximum-subarray/

题目原意是给定一个序列,找出和最大的连续子序列。如:[-2,1,-3,4,-1,2,1,-5,4],最大子序列是[4,-1,2,1],返回最大和是6。

经典的动态规划问题,在没有思路前一直在用贪心算法的思路,后来看了别人的博客才发现思路不对,应该用动态规划来做。这道题代码很简单,但是思路却没那么简单。 一个重要的思路是: 假设[i,j] 为最大子序列,那么对任意的k, i

int maxSubarray(vector<int> vec){    if(vec.size() == 0) return 0;    int localmax = vec[0];    int allmax = vec[0];    for(int i =1; i<vec.size(); i++){        localmax = max(vec[i] , localmax + vec[i]);  //假如vec[i] 大于 localmax + vec[i] ,说明localmax为负数,应舍弃。        allmax = max(localmax, allmax);   //比较全局最大值和局部最大值    }    return allmax;}

后续会给出其他解法。