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

LeetCode 53. 最大子数组和

原题链接:. - 力扣(LeetCode)

给你一个整数数组 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 <= nums.length <= 10^5
  • -10^4 <= nums[i] <= 10^4

思路1:

贪心思路,取一个变量 cnt 记录当前子数组的和,如果 cnt < 0,这时就应该舍弃原来的子数组,将 cnt 置为0,重新记录新的子数组的和。

代码1:

class Solution {public int maxSubArray(int[] nums) {int res = Integer.MIN_VALUE;int cnt = 0;for(int i=0;i < nums.length; i++){cnt += nums[i];res = Math.max(res,cnt);if(cnt < 0){cnt = 0;}}return res;}
}

思路2:

动态规划。取 dp[ i ] 为以 nums[ i ] 结尾的最大子数组的和。在每个数字 nums[ i ] 处有两个选择。一是 nums[ i ] 作为前面的子数组的一部分,此时 dp [ i ] = dp[ i-1] + nums[ i ];二是 nums[ i ] 作为一个新的子数组,此时 dp[ i ] = nums[ i ]。故递推公式为 dp[ i ] = Math.max(dp[ i-1] + nums[ i ], nums[ i ] )。 

初始化时,dp[ 0 ] = nums[ 0 ]。遍历顺序为从前往后遍历。

代码2:

class Solution {public int maxSubArray(int[] nums) {int n = nums.length;//dp[i]表示截止nums[i]的连续子数组的最大和int[] dp = new int[n];dp[0] = nums[0];int res = dp[0];for(int i=1;i<n;i++){//在nums[i]处有两种选择//1.加入前面的数组//2.自己作为一个数组dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);res = Math.max(res,dp[i]);}return res;}
}

相关文章:

  • [C++] 小游戏 征伐 SLG DNF 0.0.1 版本 zty出品
  • SpringBoot(Java)实现MQTT连接(本地Mosquitto)通讯调试
  • Leetcode 11.乘最多水的容器(字节,快手面试题)
  • 【Spring基础3】- Spring的入门程序
  • 【python进阶攻略13】协程、内存copy、多进程
  • AI大模型面试大纲
  • Flutter中使用FFI的方式链接C/C++的so库(harmonyos)
  • 万象奥科工业平板上线,邀您体验与众不同!
  • 聊一下数据脱敏
  • 【机器学习(五)】分类和回归任务-AdaBoost算法
  • webpack 4 的 30 个步骤构建 react 开发环境
  • .NET CORE程序发布IIS后报错误 500.19
  • 嵌入式必懂微控制器选型:STM32、ESP32、AVR与PIC的比较分析
  • 银河麒麟,apt 安装软件报错640Unknown Status
  • JUC高并发编程5:多线程锁
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【Amaple教程】5. 插件
  • 【React系列】如何构建React应用程序
  • echarts花样作死的坑
  • java概述
  • Linux中的硬链接与软链接
  • PhantomJS 安装
  • Vue.js 移动端适配之 vw 解决方案
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 反思总结然后整装待发
  • 构建二叉树进行数值数组的去重及优化
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 设计模式 开闭原则
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • ###项目技术发展史
  • #stm32整理(一)flash读写
  • ()、[]、{}、(())、[[]]命令替换
  • (003)SlickEdit Unity的补全
  • (4.10~4.16)
  • (8)STL算法之替换
  • (C)一些题4
  • (力扣)循环队列的实现与详解(C语言)
  • (生成器)yield与(迭代器)generator
  • (四)汇编语言——简单程序
  • (四)模仿学习-完成后台管理页面查询
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (译)2019年前端性能优化清单 — 下篇
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET Core 中插件式开发实现
  • .Net mvc总结
  • .NET导入Excel数据
  • [16/N]论得趣
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解