题目:
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
.
分析:
题目要求就是求出数组中的最大子数组(总和最大),并返回总和。
这道题目是可以用分治算法解题,其具体的解题思路为:将数组分为左右两部分,则有以下三种情况:
- 最大的子数组全部在左半部分;
- 最大的子数组全部在右半部分;
- 最大的子数组有元素在左半部分有些在右半部分;
大小最大的即为原数组的最大子数组。
该代码具体内容会有点复杂 :
class Solution {
int solution (vector<int>& nums, int left, int right) {
if(nums.size() == 1) {
return nums[0];
}
int mid = (left + right) / 2;
int left_max = solution(nums,left,mid);
int right_max = solution(nums,mid+1,right);
int leftsum = nums[mid];
int sum = nums[mid];
for(int i = mid - 1; i >= left; i--) {
sum += nums[i];
leftsum = max(leftsum, sum);
}
int rightsum = nums[mid + 1];
sum = nums[mid + 1];
for(int i = mid + 2; i <= right; i++) {
sum += nums[i];
rightsum = max(rightsum,sum);
}
return max(max(left_max,right_max),(leftsum + rightsum));
}
public:
int maxSubArray(vector<int>& nums) {
return solution (nums,0,nums.size() - 1);
}
};
以上代码存在点bug,不过我尽力了
![难过](http://static.blog.csdn.net/xheditor/xheditor_emot/default/sad.gif)