Leetcode Problem53

Maximum Subarray

问题描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

问题解决:假设cur为数组中以a[i-1]结尾的当前最大字段和,sum为数组中已知的最大字段和,当搜索到数组中最后一个元素时,便可以知道数组的最大字段和。这也是典型的动态规划问题。

动态规划的主要思想就是把大问题划分为小问题,通过求解小问题来逐渐解决大问题。

满足动态规划思想的问题具备两个典型特征:

  • 最优子结构:就是说局部的最优解能够决定全局的最优解,最优解的子问题也是最优的。
  • 子问题重叠 :就是说大问题划分为小问题时,并不是每次都是新问题,有的小问题可能已经在前面的计算中出现过。
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if(nums.size()==0) return 0;
        int sum=nums[0],cur=nums[0];
        for(int i=1;i<nums.size();i++)
        {
            cur=max(cur+nums[i],nums[i]);
            sum=max(cur,sum);
        }
        return sum;
    }
};

beats 100.00 % of cpp submissions.

猜你喜欢

转载自blog.csdn.net/vandance/article/details/82592579
今日推荐