LeetCode53、最大子序和

leetcode53_最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6 暴力法, 我们通过i和j记录子序列的左右边界,然后遍历所有的边界,寻找区间[i:j]和最大是多少即可。 时间复杂度O(n2) 空间复杂度 O(1) import sys class Solution: def maxSubArray(self, nums: List[int]) -> int: maxsub = nums[0] 立即下载
53、最大子序和

题目链接

https://leetcode-cn.com/problems/maximum-subarray/

题目描述

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

示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解题思路
动态规划
1、遍历数组
2、定义sum代表目前的累加值,res代表目前的最优值
3、sum=max(nums[i],sum+nums[i]);(若加当前的数不会增加,则使用当前的值,舍弃以前的值)
4、res=max(sum,res);(若当前的sum是最优的,则记录在案)
代码实现
public class Solution {
    public int maxSubArray(int[] nums) {
        int res=Integer.MIN_VALUE;
        int sum=0;
        for(int i=0;i<nums.length;i++){
            sum = Math.max(nums[i],sum+nums[i]);
            res = Math.max(res,sum);
        }
        return res;
    }
}
分治法
1、从中间将数组分为两部分
2、求左边的最优leftsum,求右边的最优rightsum,求全部的最佳sum
3、res=max(leftsum,rightsum,sum)
4、往下分治
5、返回最佳结果
代码实现
public class Solution {
    public int maxSubArray(int[] nums) {
        return maxSubArrayPart(nums,0,nums.length-1);
    }
    private int maxSubArrayPart(int[] nums,int left,int right){
        if (left==right) return nums[left];
        else{
            int mid=(left+right)/2;
            return Math.max(maxSubArrayPart(nums,left,mid),Math.max(maxSubArrayPart(nums,mid+1,right),maxSubArraySum(nums,left,right)));
        }
    }
    private int maxSubArraySum(int[] nums,int left,int right){
        int leftsum=Integer.MIN_VALUE;
        int rightsum=Integer.MIN_VALUE;
        int sum=0;
        //!!!需要注意从mid向left遍历
        for(int i=(left+right)/2;i>=left;i--){
            sum+=nums[i];
            if (sum>leftsum) leftsum=sum;
        }
        sum=0;
        for(int i=(left+right)/2+1;i<=right;i++){
            sum+=nums[i];
            if (sum>rightsum) rightsum=sum;
        }
        return rightsum+leftsum;
    }
}
注意
1、maxSubArraySum函数中要从mid向两边扩散,原因是最长公共子序列,这样才能保证连续
2、maxSubArraySum中的两个for循环截止的条件是left而不是right
总结

java中的大数是Integer.MAX_VALUE 为2^31-1

java中的小数是Integer.MIN_VALUE 为-2^31

LeetCode53:最大子序和(分治思想,Python3实现) 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 分治法求解思路:将原问题转化为求解子问题,通过子问题的解求解原问题的解。 原问题:求整数数组中,具有最大和的连续子数组。 子问题:取数组中位于中间位置的值middle,middle左侧的子数组leftnums,middle右侧子数组rightnums。分别求leftnums,rightnums中最大和left和right,和包含中间值mid 立即下载

相关推荐

FPGA开发者必看:手把手教你用Xilinx ERNIC IP实现RoCE v2网络加速(附PG332文档解读)

本文详细解析了Xilinx ERNIC IP在FPGA平台上实现RoCE v2网络加速的全流程,包括架构设计、Vivado工程配置、驱动开发与性能调优。通过PG332技术文档的实践指导,帮助开发者快速构建低延迟、高性能的网络加速方案,适用于数据中心和边缘计算场景。

weixin_29168813的博客 668

LeetCode 一题多解 | 53. 最大子数组和:五种解法完全手册

作者:nettee 公众号:面向大象编程一、原题描述 LeetCode 53. Maximum Subarray 最大子序和二、全部解法 本文将介绍「最大子数组和」...

nettee的专栏 1509

T型三电平关管顺序要求

摘要: T型三电平拓扑中,IGBT关断必须遵循“外管先关、内管后关”的时序,否则易导致器件损坏。正常导通时,外管与内管共同分担电压;正确关断时,外管先关使电流经内管续流至中点,避免电压过冲;若内管先关,电流路径被强制切断,杂散电感引发高压尖峰击穿器件。这一时序本质是为电流提供低应力续流路径,需通过硬件或软件严格保障。

yun0804的博客 2373

LeetCode53. 最大子数组和(暴力、dp、贪心、分治)

思路: 比较经典的一个题,求最大连续区间的和。1. 暴力:直接利用两重循环枚举区间的左右边界点并不断取max即可,时间复杂度O().2. dp:状态转移表达式——dp[i] = max(dp[i-1]+num[1], num[i]),dp[i]表示以num[i]为结尾的最大区间和,每次的当前节点结尾最大值肯定是上一节点最大值加上当前节点与否,时间复杂度O(n)。 3. 贪心:从开头就一直选择节点,知道当前的sum...

Satur9的博客 635

Spring AI Alibaba Agent开发实战:DeepResearch Agent调度系统

智能Agent调度系统通过专业化分工解决传统AI系统的三大痛点:通用模型专业性不足、处理效率低下和资源浪费。系统采用分层架构设计,核心组件包括智能调度器、Agent选择辅助器和集成工具类,实现问题分类、专业Agent匹配和搜索策略优化的全流程自动化。系统特点包括:1)配置驱动的灵活扩展;2)分层回退的容错机制;3)支持工具调用与传统搜索的智能切换。该架构通过策略模式和依赖注入等技术,在保证稳定性的同时显著提升了研究质量和效率,为企业级多Agent协作提供了完整解决方案。(149字)

wjianwei666的专栏 501

ROS2 多机器人导航仿真入门教程(一)

RMF 是建立在 ROS 2 基础上的一系列可重复使用、可扩展的库和工具,可实现任何类型机器人系统的异构机群的互操作性。RMF 利用标准化的通信协议与部署机器人的基础设施、环境和自动化系统进行通信,以优化关键资源(如机器人、电梯、门、通道等)的使用。它通过资源分配和通过 RMF 核心(将在本书后面详细介绍)防止共享资源冲突,从而为系统增加智能。RMF 灵活而强大,几乎可以在任何通信层上运行,并与任何数量的物联网设备集成。RMF 的架构设计允许随着环境自动化水平的提高而扩展。

2506_90492529的博客 1658

leetCode 53.最大子数和 图解 + 贪心算法/动态规划+优化

由于前面已经计算过包括i = 1之前的最大连续子序列和,并且将值保存在 dp[1] 里,所以count = dp[1] + (-3) = 1 + (-3) = -2,接着在count 和 nums[2] = -3中选取最大值,即。发现 count < nums[3],这时候取最大值就可以让dp[3] = nums[3],表示接下来,可以调整起点,让 i = 3 为起点。count = (-2) + 1 = -1,在count 和 nums[1] = 1中选取最大值,即。贪心算法的巧妙需要慢慢体会!

呵呵哒!的博客 1937

学Simulink--基础微电网场景实例:基于Simulink的微电网黑启动过程建模与仿真

黑启动(Black Start)是指在全系统停电(无电压、无频率)状态下,微电网依靠内部电源自主恢复供电的能力。🌩️典型场景主网长时间故障自然灾害导致区域停电计划检修后重启❗挑战无参考电压/频率 → 逆变器无法锁相负荷逐级投入 → 需避免过流/过压多电源协调 → 防止环流或失步✅黑启动成功标准在30 秒内恢复关键负荷供电电压/频率稳定在范围内无设备损坏或保护跳闸🎯本文目标:手把手教你使用 Simulink + Simscape + Stateflow 搭建。

amy_mhd的博客 200

leetcode(力扣) 53. 最大子数组和 (动态规划 & 贪心)

只要记住这里可能是0 到 i , 1 到 i , n到i,反正就是 不管是从哪里到i,dp[i] 就表示到下标i的子序列的最大和。这块就要回头看dp的含义了,dp表示以i下标为结尾的,也就是以nums[i]为结尾的最大子数组和,所以当前的nums[i]无论如何必加入。遍历到nums[i] 的时候,肯定是要这个值,因为我们dp的含义就是到这个值的,也就是从这个值之前的子数组的最大和。这里有一个东西就是返回什么值,要看dp的含义,再来一遍,dp[i] 定义为以下标i为结束下标的子数组的最大和。

深度不学习!!的博客 1201

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

Robot_PLC_HMI_Automation 3292

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

蚂蚁小兵 2463

LeetCode 第 53 题:最大子序和(动态规划、分治算法)

方法一:暴力解法 比较容易想到的是用“暴力解法”做,即穷举所有的子区间。思路虽然简单,但是写好暴力解法也不是一件容易的事情。 使用双层循环,穷举所有的子区间; 然后再对子区间内的所有元素求和; 时间复杂度是立方级别的。 参考代码 1: 这里要注意一些边界条件: 变量 i 表示结尾的那个索引; 变量 j 表示从索引 0 依次向前走; Java 代码: public class Solutio...

李威威的博客 1831

【WRF数据准备】土地利用数据-MODIS MCD12Q1数据下载及制备

【WRF数据准备】MODIS静态地理数据下载及制备

WW、forever的博客 3413

LeetCode 53. 最大子序和 动态规划

给定一个整数数组 `nums` ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 **示例:** ``` 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 ```

一起加油 5784

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Leetcode 53. 最大子序和

Leetcode 53. 最大子序和1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/maximum-subarray/   本质上就是一个动态规划问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using namespace std; #include "algori

珍惜 8928

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【LeetCode力扣题库】53. 最大子序和(简单)

原题目链接:53. 最大子序和 题目描述: 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组[4,-1,2,1] 的和最大,为6 。 示例 2: 输入:nums = [1] 输出:1 示例 3: 输入:nums = [0] 输出:0 示例 4: 输入:nums = [-1] 输出:-1 示例 5: 输入:nums = [...

一个平平无奇的攻城狮 2596

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[LeetCode-53] 最大子序和

发布于个人公众号,打开微信,搜索MelodyJerry即可 ## 53. 最大子序和 LeetCode官方的难度定位为简单,个人觉得可以达到中等的!!! 难度 简单 通过率 54.64%(571,167/1,045,196) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 .

喜欢前端的后端 MelodyJerry 7869

【力扣 (LeetCode)】53. 最大子序和

53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-subarray #python3 cl

happygirlyao的博客 378

力扣53. 最大子序和

力扣53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 基本知识 如何申请二维数组 法一:利用二级指针申请一个二维数组 a=(int**)malloc(sizeof(i...

sinat_27523689的博客 240

【力扣LeetCode】53 最大子序和

题目描述(难度易) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 链接 https://leetcode-cn.com/...

Jiewang的博客 279

LeetCode 53最大子序和

LeetCode 53最大子序和 题目简述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 输入:[-2,1,-3,4,-1,2,1,-5,4] 输出: 6 思路:动态规划O(n) 首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans 如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留并加上当前遍历数字 如果 sum <= 0,则说明 sum 对结果无增益效果,需要舍弃,则 sum 直接更新为当

XBlog 138

LeetCode53 最大子序和

LeetCode53 最大子序和 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 来源:力扣(LeetCode) 链...

sakurasakura1996的博客 372

LeetCode 53. 最大子序和

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

sdm12345的博客 197

【C语言】Leetcode 53.最大子序和

开始刷Leetcode,感觉自己能力还是不足啊。。。基础不扎实,好多都忘记了,要好好补一下 目录 题目描述 我最初的思路 贪心 动态规划 题目描述 【简单题】给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 我最初的思路 遍历数组,在O(n)时间内对每个位置计算从前面到此处的最大子序和,分别计算前面的最大子序和+当前数值,除掉之前最大子序头的子序和和前面的最大子序和,对这三者进行比较,依条件操作。 但这一思路...

code七的博客 4400

LeetCode 力扣 53. 最大子序和

题目描述(简单难度) 给一个数组,找出一个连续的子数组,长度任意,和最大。 解法一 动态规划思路一 用一个二维数组 dp[ i ] [ len ] 表示从下标 i 开始,长度为 len 的子数组的元素和。 这样长度是 len 1 的子数组就可以通过长度是 len 的子数组去求,也就是下边的递推式, dp [ i ] [ len 1 ] = dp[ i ] [ len ] nums...

wind_liang的博客 1051

LeetCode53. 最大子序和

/** 53. 最大子序和 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释:连续子数组[4,-1,2,1] 的和最大,为6。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-...

lidw0431的博客 137
上一篇: LeetCode15、三数之和
下一篇: LeetCode149、最后一块石头的重量 II
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值