leetcode 53. 最大子序和

O(n)时间O(1)空间

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int len=nums.size();
        if(len==0) return 0;
        int dp=nums[0];
        int res=nums[0];
        //dp表示以i元素结尾的最大子串
        for(int i=1;i<len;i++){
            dp=max(nums[i],dp+nums[i]);
            res=max(dp,res);
        }
        return res;
    }
};

原文地址:https://www.cnblogs.com/joelwang/p/10868702.html

时间: 2024-10-24 08:42:09

leetcode 53. 最大子序和的相关文章

Leetcode之动态规划(DP)专题-53. 最大子序和(Maximum Subarray)

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6. 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解. 定义:dp[i] 表示从起点到index=i的这个段内的最大子序和. 例如:dp[1] = 在[-2,1]这个区间里面的最大子序和,dp[1]=1 写出状态转移方程:dp[i

【Leetcode】最大子序和

思路: 分治法.记最大子序和为maxResult,函数为int getMaxSub( *, * ) {}. 向量A= [a1, a2, a3, ...., ai, ai+1, a+2, ......, aj-1, aj], maxResult = max( maxresult(a1, ......, ai),  getMaxSub(*, i+1) ),其中sum(a1, ......, ai) <= 0. class Solution { public: int maxSubArray(vect

LeetCode 简单 - 最大子序和(53)

采用动态规划方法O(n) 设sum[i]为以第i个元素结尾且和最大的连续子数组.假设对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且和最大的连续子数组实际上,要么是以第i-1个元素结尾且和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i]=max(sum[i-1]+a[i],a[i]) class Solution { public: int maxSubArray(vector<int>& nums) { int res=INT_M

【leetcode算法-简单】53. 最大子序和

[题目描述] 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6.进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解. [解答] 解法:动态规划法   如果Sum<0,那么 Sum + nums[i] < nums[i] ,在这种情况下,Sum 对 nums[i] 没有任何的增益效果

53. 最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6. 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解. O(n)复杂度: class Solution { public: int maxSubArray(vector<int>& nums) { int maxn =

53最大子序和.py

题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 来源:https://leetcode-cn.com/problems/maximum-subarray/solution/ 法一:动态规划 思路:关键是要正确的写出状态转移方程.dp[i]表示的是以nums[i]结尾的最大子串和,注意不是nums[i]中的最大子串和,如果是nums[i]中的最大子串和,则状态转移方程较复杂,无法直接写出. 参考:https://leetcode-cn.

53. 最大子序和(c++)

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例:输入: [-2,1,-3,4,-1,2,1,-5,4],   输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6. 进阶:  如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解. int maxSubArray(vector<int>& nums) { if(nums.size() == 0)  return -1; int ans = 

LeetCode 第53题,最大子序和

题目概述 题目:力扣:53.最大子序和 难易:简单 内容: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-subarray 第一次思路 首先将数组类型分为三类:1.空数组 2.只有一个

代码题(25)— 最大子序和、最长上升子序列

1.53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6. class Solution { public: int maxSubArray(vector<int>& nums) { if(nums.empty()) return 0; int res = nums[0]; int