【LeetCode】53. Maximum Subarray

来源:互联网 发布:网络安全法宣传 编辑:程序博客网 时间:2024/05/01 02:38

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.

click to show more practice.

  • Difficulty: Medium

动态规划

另sum[i]表示从i开始的最大子串和,则有递推公式:sum[i] = max{A[i], A[i] + sum[i+1]}

因为递推式只用到了后一项,所以在编码实现的时候可以进行状态压缩,用一个变量即可

class Solution {public:    int maxSubArray(vector<int>& nums) {        int n=nums.size();  int sum = nums[n - 1];  int maxSum = sum;  for (int i = n - 2; i >= 0; i--) {    sum = max(nums[i], sum + nums[i]);    maxSum = max(maxSum, sum);  }  return maxSum;    }};


0 0
原创粉丝点击