面试题31——连续子数组的最大和
题目描写叙述
输入一个数组,有正数也有负数,求连续子数组的最大和。
解题思路
典型动态规划
设f(i) 表示 以i位置结尾的子数组和,那么有:
递推式:f(i) = max{ f(i-1) + array[i], array[i] }
初值:f(0) = array[0]
实现代码
class Solution { public: int FindGreatestSumOfSubArray(vector<int> array) { if(array.empty()) return 0; int retMax=INT_MIN; int len = array.size(); vector<int> ans(len,INT_MIN); ans[0] = array[0]; retMax = ans[0]; for(int i=1; i<len; i++) { ans[i] = getMax( (ans[i-1] + array[i]), array[i]); if(ans[i] > retMax) retMax = ans[i]; } return retMax; } int getMax(int a, int b) { return a>b?a:b; } };