题目:
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
.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
题意:
最大连续子序列和,在一个数组中找到和最大的连续子数组。
思路:
DP(dynamic programming)问题,动态规划问题。对数组每个元素轮训,对于每个元素是否加入到之前的数组中,如果加入之后子串和增大,则加入,否则直接舍弃掉前段子串,将该元素作为下一次读取元素的前段子串。
代码:
C++版:12ms
class Solution { public: int maxSubArray(vector<int>& nums) { int curMax = nums[0]; int result = nums[0]; for(int i=1; i<nums.size(); i++){ curMax = max(curMax+nums[i], nums[i]); result = max(result, curMax); } return result; } };时间:8ms
class Solution { public: int maxSubArray(vector<int>& nums) { if(nums.size()==0){ return 0; }else if(nums.size()==1){ return nums[0]; } int curMax = nums[0]; int result = nums[0]; for(int i=1; i<nums.size(); i++){ if(curMax>0){ curMax += nums[i]; }else if(curMax<nums[i]){ curMax = nums[i]; } result = max(result, curMax); } return result; } };