当前位置: 首页 > news >正文

leetcode动态规划(二十九)-最大子数组和

题目

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 = [5,4,-1,7,8]
输出:23

思路

该题目可用贪心法解,也可用动态规划解

动规五步曲

1.确定dp数组及下标定义

dp[i]表示以第i个元素结尾最大的子数组和

2.确定递推公式

需要在已有的以前i-1的子数组的和和第i个元素进行对比,取两者的最大值

3.初始化

需要将dp[0]初始化为nums[0],其他的均为0 ,在遍历的过程中更新

4.确定遍历顺序

由递推公式可得需要从前向后遍历

5.打印dp数组

代码

class Solution:def maxSubArray(self, nums: List[int]) -> int:n = len(nums)dp = [0]*ndp[0] = nums[0]result = dp[0]for i in range(1,n):dp[i] = max(dp[i-1]+nums[i],nums[i])result = max(dp[i],result)return result


http://www.mrgr.cn/news/66424.html

相关文章:

  • QML----复制指定下标的ListModel数据
  • 【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(3)
  • python项目实战 小说下载源码
  • Android——动态注册广播
  • 为什么使用hooks,什么情况下使用hooks
  • 分析自动下载电路是如何工作的以及CH340的选型
  • 【JavaSE】(2) 方法
  • 基于Leaflet的自助标绘源码解析-其它对象解析
  • 有线电视 1.27.5 | 完全免费的电视直播应用,频道丰富,画质清晰
  • File和InputStream,OutputStream
  • 什么时候出现线程安全,如何实现线程安全?
  • 如何显示弹出式窗口
  • Spark的容错机制
  • WCY的比赛题解
  • java学习3---面向对象
  • 19. 架构重要需求
  • 1105--面试代码题
  • HttpClientUtils
  • 了解数据库并发产生的问题
  • 大数据新视界 -- 大数据大厂之 Impala 与内存管理:如何避免资源瓶颈(上)(5/30)
  • Java开发中的分布式锁使用教程
  • 安装nodemon报错
  • 三维测量与建模笔记 - 3.1 相机标定基本概念
  • 什么是Scaling Law,谈谈你对它的理解
  • PyTorch 2.0: 开启深度学习框架新纪元
  • DI 依赖注入