剑指offer-连续子数组的最大和

来源:互联网 发布:实验数据分析怎么写 编辑:程序博客网 时间:2024/06/05 16:47

问题

题目:[剑指offer-连续子数组的最大和]

思路

这个题做了好几次了,套路应该是DAG模型的最短路。我不是很确定,但是我觉得类似。具体来说,状态定义的时候:dp[i]表示以array[i]结尾的连续数组最大和,因为题目要求是连续,所以我觉得一定要以array[i]结尾。至于最大,最后把状态数组扫描一遍即可。

代码

class Solution {public:    int FindGreatestSumOfSubArray(vector<int> array) {        int sz = array.size();        if(!sz) return 0;        vector<int> dp( sz, 0 );        dp[0] = array[0];        int ans = dp[0];        for(int i = 1; i < sz; ++i){            dp[i] = ( dp[i-1] < 0 )?array[i]:dp[i-1] + array[i];// 状态转移方程            ans = ( dp[i] > ans )?dp[i]:ans;        }        return ans;    }};