【动态规划】LeetCode #53 最大子序和

LeetCode.53 最大子序和(python解法) 目录题目solution_1solution_2solution_3参考资料 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 solution_1 思路:遍历法。遍历数组,用onesum去维护当前... 阅读详情

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

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

DP的重点在于如何定义 dp[n] ,以及确定状态转移方程式,上一个题 #70 爬楼梯所设即所求,而本题需要返回的是一堆和中最大的一个。

设dp[i] 为以 nums[i] 结尾的连续数组的最大和,因为是以 nums[i] 结尾,必然有 nums[i],且必须连续,可以按dp[i-1]是否大于0来分情况讨论:
若dp[i-1] > 0,则 dp[i] = dp[i-1] + nums[i]
若dp[i-1] <= 0, 则dp[i] = nums[i]

需要注意的是,返回的结果不是简单的dp[n] ,因为设的 dp[i] 为以 nums[i] 结尾的连续数组的最大和,要想得到最大子序和,应该返回 max(dp[i])。

/*
*设 dp[i] 为以 nums[i] 结尾的连续数组的最大和
*因为是以 nums[i] 结尾,必然有 nums[i]
*若dp[i-1] > 0,则 dp[i] = dp[i-1] + nums[i]
*若dp[i-1] <= 0, 则dp[i] = nums[i]
*/
class Solution {
    public int maxSubArray(int[] nums) {
        if(nums.length == 1) return nums[0];
        int result = nums[0];
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        for(int i = 1; i < nums.length; i++){
            dp[i] = Math.max(dp[i-1] + nums[i], nums[i]);
            result = Math.max(result, dp[i]);
        }
           
        return result;
    }
}

后续优化链接:

【动态规划】 LeetCode #面试题42 连续子数组的最大和(双100%)

53. 最大子序和 53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 输入:nums = [1] 输出:1 输入:nums = [0] 输出:0 动态规划 动态规划解析: 状态定义: 设动态规划列表 dp,dp[i]d p, d p[i]dp,dp[i] 代表以元素 nums[i]n u m s[ 阅读详情

相关推荐

【3D计算机视觉】从PointNet到PointNet++理论及pytorch代码

从PointNet到PointNet++理论及代码详解1. 点云是什么1.1 三维数据的表现形式1.2 为什么使用点云1.3 点云上以往的相关工作2. PointNet2.1 基于点云的置换不变性2.1.1 由对称函数到PointNet(vanilla)2.1.2 理论证明2.2 基于点云的旋转不变性2.3 网络总体结构2.4 实验结果和网络的鲁棒性2.5 代码解析3. PointNet++3.1...

小执着的博客 8万+

动态规划入门 之 最大子序和 dp or 分治 (循序渐进)

最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 方法一、暴力解法 比较容易想到的是用“暴力解法”做,即穷举所有的子区间。思路虽然简单,但是写好暴力解法也不是一件容易的事情。 使用双层循环,穷举所有的子区间; 然后再对子区

LizhiQiang 565

从零开始:使用COLMAP与OpenMVS构建高精度三维Mesh模型

本文为零基础新手提供了使用COLMAP与OpenMVS构建高精度三维Mesh模型的完整实战指南。详细介绍了从环境配置、数据采集黄金法则,到COLMAP稀疏与稠密重建、OpenMVS网格生成与纹理映射的每一步操作,并分享了关键的避坑技巧与参数调优建议,帮助读者从二维照片中成功重建出属于自己的三维模型。

metal的博客 506

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

示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 代码详解: public class Solution { public int maxSubArray(int[] nums) { int len = nums.length; ...

qq_41582941的博客 1万+

PyTorch实战:A2C算法在Pendulum环境中的调参技巧与收敛优化

本文详细介绍了使用PyTorch实现A2C算法在Pendulum环境中的调参技巧与收敛优化方法。通过分析Pendulum环境特性、设计高效的网络架构、优化超参数设置以及提升训练稳定性,帮助开发者掌握强化学习中的policy-based方法。文章特别强调了奖励工程、优势估计改进和梯度裁剪等关键优化策略,为连续控制任务提供了实用解决方案。

rum55的博客 213

开放自己本机的mysql允许别人连接

需要在左下角搜索记事本应用,右键以管理员身份运行,之后按照上述地址找到my.ini文件,ctrl+F搜索到[mysqld],修改或添加 bind-address 设置,将其更改为 0.0.0.0 或你的计算机的 IP 地址。打开 MySQL 的配置文件 my.ini。username和密码是第3步创建能从远程地址访问的用户和密码,ip地址是ipconfig查看的地址(前提是能ping通,才能连接该地址对应的数据库)。使用 MySQL 命令行连接到自己的数据库,并创建一个能够从远程地址访问的用户。

m0_74824687的博客 1168

leetcode 53. 最大子序和(分治法和动态规划)

给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释:连续子数组[4,-1,2,1] 的和最大,为6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 思路: 代码: 动态规划:很简单,定义一个数组,dp[]...

行走巨人国 7442

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

算法如诗的博客 258

【LeetCode】【Java】53. 最大子序和-给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

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

CJCC白朴的博客 2377

微信小程序 - 最新实现项目适老化设计全流程及源码,老年模式大字版与常规版页面样式切换,老年人大字模式字体与布局更换关怀版解决方案(新老项目均适用的方案,全局页面统一修改文本字号/DOM排版元素等)

微信小程序,vue2,vue3,老年大字版设计,小程序开发如何实现适老化方案,放大字体字号及改变页面的布局,小程序关怀模式实现思路及代码,统一将布局都改了,全局修改字体大小适配老年人看不清问题,小程序怎么接入老年模式并根据模式改变页面的UI设计,实现全局修改字体大小适老化/关怀版改造,最新详细示例代码全流程,字体放大/缩小,老项目怎么适配老年人模式方案,小程序适老化设计指南,当切换成老年模式时页面所有排版都会发生变化,小程序vue开发,新手详细教程,老年模式字体设置思路和UI布局的设计,开发者可以通过wx.

🏆 前端领域优质创作者 7309

华为OD机试 - 物流仓储多维度成本利润综合查询系统 - 二维数组(Python/JS/C/C++ 新系统 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。某物流企业在全国多个仓库开展仓储业务,需要对不同仓库、不同时段的入库成本、出库收入和库存损耗进行综合统计分析,用于生成 日报、周报和月报。字段说明及取值范围如下:warehouses: int[] 扁平化数组 [w0d0in, w0d0out,

学Java,找哪吒 309

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和

/**      * 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。      * 样例      * 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6      *       * 分析:子数组是指原数组中连续的一组数。求最大值,如果数组中元素都小于0;则直接返回数组的最大值。对于一般的情况。我们只要遍历求数组,    ...

lzljava的专栏 4737

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 493

leetcode #53 最大子序和 | 刷题之路第二站——动态规划类问题

题号 53 题目描述 给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 链接:leetcode #53 最大子序和 解题思路1——暴力法 1- 设定两个指针 : maxSub...

m0_37714470的博客 213

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

力扣算法刷题Day53|动态规划:最长公共子序列 不相交的线 最大子序和

力扣题目:#1143.最长公共子序列刷题时长:参考题解后5min解题方法:动态规划复杂度分析问题总结本题收获 dp数组的初始化:统一初始为0 确定遍历顺序:从前向后,从上到下 力扣题目:#1035.不相交的线刷题时长:解题方法:动态规划复杂度分析问题总结本题收获力扣题目:#53. 最大子序和刷题时长:参考题解后5min解题方法:动态规划复杂度分析问题总结本题收获

m0_73817408的博客 397

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Leetcode 053 最大子序和 python 分治+动态规划

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

weixin_41958153的博客 5520

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeetCode:53. 最大子序和(python)

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

wk的博客 1158

【leetcode】Python实现-53.最大子序和

53.最大子序和 描述 给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大。 例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4], 连续子序列 [4,-1,2,1] 的和最大,为 6。 我 v1.0 class Solution: def maxSubArray(self, nums): """...

神不烦 6710

[动态规划]Leetcode53.最大子序和(python)

[动态规划]Leetcode53.最大子序和 如果读者对于动态规划思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【动态规划】详解》,很详细的介绍了动态规划求解思路及方法,有利于你更好的学习动态规划。 题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例1 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 DP定义及状态方程 定义dp[i]

阿旭的博客 698

【力扣】53.最大子序和(递推、动态规划)

【力扣】53.最大子序和 题目: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 思路: 假设 nums 数组的长度是 nn,下标从 00 到 n - 1n−1。 我们用ai代表 nums[i],用 f(...

qq_42245490的博客 442

leetcode-53 | 最大子序和

title: leetcode-53 | 最大子序和 date: 2019-9-12 10:39:51 comments: true categories: “leetcode” tags: - leetcode 简单难度 - 动态规划法 - 分治法 题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3...

梦否 542

LeetCode 53. 最大子序和

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

sdm12345的博客 198

leetcode53. 最大子序和

leetcode53.题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 解题思路: 1.动态规划解法   分析明白了其实很简单,我们从左到右扫描整个数组,如果加到i位置时候,和小于0了,说明前面0到i,对于后面的数是不是一点没有了呢,我们应该重新开始加,相当于抛弃了一段无用数组,但是我们需要把把0到i里的最大值统计出来,相当于我们在...

从左到右 339

LeetCode #53. 最大子序和

LeetCode #53. 最大子序和I. Description:II. Solution:version 1解题思路:Code: I. Description: II. Solution: version 1 解题思路:   通过这道题开始尝试动态规划的算法思想。动态规划的思想主要是利用历史记录来避免一些重复计算,这些历史记录通常是用一维数组或二维数组来保存的。做动态规划题的三个重要步骤总结如下: 定义数组元素的含义 上面说到会用一维或二维数组来记录历史记录,假设用一维数组dp[ ]吧,一个非常

daodao1991的博客 161

Leetcode——Array-53. 最大子序和

Leetcode——Array-53. 最大子序和1.题目描述2.解题思路3.程序代码 1.题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 2.解题思路 解法一:DP(动态规划思想) 不断的比较累加值和当前值,有两种情况:1

WH1T3_90的博客 223

LeetCode-53、最大子序和-简单

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

clover_my的博客 113
上一篇: 【动态规划入门】LeetCode #70 爬楼梯
下一篇: 【动态规划】 LeetCode #300 最长上升子序列
Code_Yilia
博客等级 码龄11年 4粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值