53. Maximum Subarray

来源:互联网 发布:北京网络约车新规 编辑:程序博客网 时间:2024/05/16 14:08

题目:

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.

分析:

题目要求就是求出数组中的最大子数组(总和最大),并返回总和。

这道题目是可以用分治算法解题,其具体的解题思路为:将数组分为左右两部分,则有以下三种情况:

  1. 最大的子数组全部在左半部分;
  2. 最大的子数组全部在右半部分;
  3. 最大的子数组有元素在左半部分有些在右半部分;

则先分别求出左半部分和右半部分的最大子数组(也分为上述三种情况),再求出在左半部分和右半部分都有元素的最大子数组。最后将三个数组的总和进行比较


大小最大的即为原数组的最大子数组。


该代码具体内容会有点复杂 :

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,不过我尽力了难过


0 0
原创粉丝点击