题目描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [−2,1,−3,4,−1,2,1,−5,4], the contiguous subarray [4,−1,2,1] has
the largest sum = 6.
分析:最大连续子序列和算是很经典的一道题,也是面试中问的比较多的,本题简单的解法可以采用动态规划即动规;状态转移方程为:
f[i] = max{f[i-1]+nums[i],nums[i]} 其中1<=i
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int maxSubarray(vector<int>& nums) {
int result = INT_MIN, f = 0;
if (nums.size() == 0) return 0;
for (int i = 0; i < nums.size();i++) {
f = max(f + nums[i],nums[i]);
result = max(f,result);
}
return result;
}
};
int main(int argc,char** argv) {
Solution test;
vector<int> nums = {-5,3,2,0,-7,4,-3,5,6,-3};
cout << "Result:" << test.maxSubarray(nums) << endl;
system("pause");
return 0;
}
结果如下: