解题思路

【leetcode题解】最大子数和 - 图1

代码

  1. // class Solution {
  2. // public:
  3. // int crossSum(vector<int> & nums, int left, int right, int p)
  4. // {
  5. // if(left == right) return nums[left];
  6. // int currSum = 0, leftSum = INT_MIN, rightSum = INT_MIN;
  7. // for(int i = p ; i > left-1 ; i--)
  8. // {
  9. // currSum += nums[i];
  10. // leftSum = max(currSum, leftSum);
  11. // }
  12. // currSum = 0;
  13. // for(int i = p + 1 ; i < right + 1 ; i++)
  14. // {
  15. // currSum += nums[i];
  16. // rightSum = max(currSum, rightSum);
  17. // }
  18. // return leftSum + rightSum;
  19. // }
  20. // int unitSum(vector<int> & nums, int left, int right)
  21. // {
  22. // if(left == right)
  23. // {
  24. // return nums[left];
  25. // }
  26. // int leftSum;
  27. // int rightSum;
  28. // int RcrossSum;
  29. // leftSum = unitSum(nums, left, (left+right)/2);
  30. // rightSum = unitSum(nums, (left+right)/2+1, right);
  31. // RcrossSum = crossSum(nums, left, right, (left+right)/2);
  32. // return max(leftSum, max(rightSum, RcrossSum));
  33. // }
  34. // int maxSubArray(vector<int>& nums) {
  35. // return unitSum(nums, 0, nums.size()-1);
  36. // }
  37. // };
  38. class Solution {
  39. public:
  40. int maxSubArray(vector<int>& nums) {
  41. int currMax = nums[0];
  42. int reMax = nums[0];
  43. for(int i = 1 ; i < nums.size() ; i++)
  44. {
  45. currMax = max(nums[i], currMax + nums[i]);
  46. reMax = max(currMax, reMax);
  47. }
  48. return reMax;
  49. }
  50. };