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 = nums[0];
        int num = nums[0];
        for(int i = 1; i < nums.size(); i++) {
            if(maxn < 0 ) maxn = 0;
            maxn += nums[i];
            num = max(num,maxn);
        }

        return num;
    }
};

原文地址:https://www.cnblogs.com/jj81/p/9840347.html

时间: 2024-10-08 10:36:40

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 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); } ret

【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最大子序和.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

leetCode-最大子序和53

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

Tyvj1305最大子序和(单调队列优化dp)

描述 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7当m=2或m=3时,S=5+1=6 输入格式 第一行两个数n,m第二行有n个数,要求在n个数找到最大子序和 输出格式 一个数,数出他们的最大子序和 测试样例1 输入 6 4 1 -3 5 1 -2 3 输出 7 备注 数据范围:100%满足n,m<=300000 是不超过m,不是选m个!!!!! /* 单调队列优化dp 单调队列维护的是前