【数组】-Lc53-最大子序和(动态规划)

写在前面

  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。


目录

  • 写在前面
  • 一、场景描述
  • 二、具体步骤
    • 1.环境说明
    • 2.代码
  • 写在后面


一、场景描述

  最大子序和。给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
说明:子数组是数组中的一个连续部分

示例1:
输入:nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6示例 2:
输入:nums = [5, 4, -1, 7, 8]
输出:23

二、具体步骤

1.环境说明

名称说明
IntelliJ IDEA2019.2

2.代码

以下为Java版本实现:

public class Lc53_maxSubArray {public static void main(String[] args) {int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};System.out.println(maxSubArray(nums));}/*** 思路:* 返回值是int** 求最大和的连续子数组** 动态规划:* 用 f(i) 代表以第 i 个数结尾的「连续子数组的最大和」, f(i)= max{ f(i−1) + nums[i], nums[i]}** 动态规划和递归类似,都是把大问题拆分成小问题解决。* 区别在于:* 动态规划是自底向上的解决方式。通常使用迭代的方式,从最小的问题开始解决,然后逐步构建解决方案* 递归是自顶向下的解决方式,不断调用自身来解决问题,直到达到基本情况** 判断(前面数的和 + 当前值)与 (当前值)的大小*      如果比当前值小,那么就需要重新开始子数组(为什么?因为题目求的是最大和的子数组,加起来比当前值还小,就没必要加起来了);*      否则(前面数的和 + 当前值) 作为下一次数的和。 注意:(前面数的和 + 当前值)不是说一直越加越大,有可能会变小,但是这个序列中一定存在最大值** 简答说,就是通过比较,将数组变成了一个一个的子数组。** 比如:-2, 1, -3, 4, -1, 2, 1, -5, 4* 过程分析如下:* -2, preSum = -2, max = -2,此时序列是 -2* -2, 1,舍弃-2 preSum = 1, max = 1,此时序列是 1*     1,-3  preSum= -2, max = 1,此时序列是 1, -3*           4, 舍弃-3前面的,preSum=4, max=4,此时序列是 4*           4 ,-1, preSum = 3, max=4,此时序列是4,-1*           4,-1,2,preSum = 5, max = 5,此时序列是4,-1,2*           4,-1,2,1,preSum=6,max=6,此时序列是4,-1,2,1*           4,-1,2,1,-5,preSum=1,max=6,此时序列是4,-1,2,1,-5*           4,-1,2,1,-5,4,preSum=5,max=6,此时序列是4,-1,2,1,-5,4** @param nums* @return*/private static int maxSubArray(int[] nums) {int max = nums[0], preSum = 0;for (int num : nums) {preSum = Math.max(preSum + num, num);max = Math.max(preSum, max);}return max;}}

写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Learning Hierarchical Modular Networks for Video Captioning》论文笔记

论文信息 原文链接: Learning Hierarchical Modular Networks for Video Captioning | IEEE Journals & Magazine | IEEE Xplore 原文代码 GitHub - MarcusNerva/HMN: [CVPR2022] Official code for Hierarchical Modular Network for Video Captioning. Ou…

GPT3.5、GPT4及Midjourney中转接口ChatGPT系统KEY使用方法

很多使用ChatGPT系统、还有SparkAi、NineAi等系统都存在个比较烦的问题,Openai API 3.5KEY 4.0KEY,Midjourney接口KEY都没有一个稳定的购买或者使用渠道。直连KEY买来还得得建立反代主机,Midjourney接口通过MJ-PROXY-PLUS系统折腾了几天也能使…

【SpringCloud微服务实战06】Gateway 网关

SpringCloud中的两种常见网关类型: Gateway:基于Spring5中提供的WebFlux,响应式编程的实现,具备更好的性能。 Zuul:基于Servlet的实现,阻塞式编程。 网关的主要作用: 对用户请求做身份认证、权限校验将用户请求路由到微服务,并实现负载均衡对用户请求做限流一、…

linux用git拉取我云端以及git处理冲突

拉取后切换一个跟云端分支(dev)一样的 git branch --set-upstream-toorigin/dev dev 之后就同步了 A在dev分支写了iii,提交 B在dev分支写了hhh,提交,冲突 怎么修改,B把云端的拉下来,随便改改就行

nginx 傻瓜式安装

申请前端服务器后搭建Nginx需要申请root权限。 登录root账号后安装Nginx,并给deploy账号分配操作权限 # 安装默认最新的稳定版,安装其他版本执行:yum install nginx-1.16.1 yum -y install nginx; chown -R deploy:deploy /etc/nginx/nginx.…

大语言模型RAG-技术概览 (一)

大语言模型RAG-技术概览 (一) 一 RAG概览 检索增强生成(Retrieval-AugmentedGeneration, RAG)。即大模型在回答问题或生成问题时会先从大量的文档中检索相关的信息,然后基于这些信息进行回答。RAG很好的弥补了传统搜索方法和大模型两类技术…

低压线性恒流LED恒流驱动芯片SM15633EH:用于洗墙灯和线条灯

洗墙灯和线条灯是两种常见的LED照明产品,它们都需要使用LED恒流驱动芯片来确保稳定、可靠的电流供应,从而保证LED的使用寿命和亮度。 对于洗墙灯而言,由于其发出的光线需要覆盖较大的区域,因此需要使用较大功率的LED芯片&#xf…

提取字符串中的最长数学表达式并计算(67%用例) C卷(JavaPythonC++Node.jsC语言)

提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。如果没有,则返回0 简单数学表达式只能包含以下内容 0-9数字,符号-* 说明: 1.所有数字,计算结果都不超过long 2.如果有多个长度一样的&#…

18-结构体(初识)

18-1 概念 我们现在已经知道的数据类型: char short int long float double 但是当我们需要描述一个复杂对象时,这些数据类型单独拿出来不能满足,如: 人:名字年龄性别地址电话 书:书名作者出版社定价书…

HTML静态网页成品作业(HTML+CSS)——电影加勒比海盗介绍设计制作(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

使用Cloudflare来给wordpress网站图片自动压缩加速

首先打开Cloudflare Worker 创建一个服务名称随意,内容使用连接内的wordpress-worker.js内容覆盖原内容即可 https://github.com/Mecanik/cloudflare-image-resizing-worker 然后打开触发器然后添加路由,设置你的域名*.example.com/*注意使用通配符使域名…

2024年短视频矩阵系统源头技术开发商 --- 就315会议主题结束后分析

前言:(禁止抄袭复用本编技术分享) 短视频矩阵315提出的ip开发你的技术团队是不是还在进行? 2024年短视频矩阵系统源头技术开发商 --- 就315会议主题结束后分析,昨天的315主题会议不知道大家都看了吗,接…

STC89C52单片机 启动!!!(三)

矩阵键盘介绍 当键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。采用逐行或逐列的“扫描”,就可以读出任何位…

厉害了,2024最新听全网音乐神器

今天分享个神器app简助手,听全网音乐和看片,下载地址 夸克网盘分享 玩转互联网达人 苏生不惑备用号,分享各种黑科技软件资源和技巧,带你玩转互联网。 17篇原创内容 公众号 最新版本更新日志。 进入音乐搜索: 听周杰…

day09-Mybatis

一、Mybatis 基础操作 1 需求 功能列表: 查询 根据主键ID查询 条件查询新增更新删除 根据主键ID删除 根据主键ID批量删除 2 准备 实施前的准备工作: 准备数据库表创建一个新的 springboot 工程,选择引入对应的起步依赖(mybatis、…

Vue3-03_组件基础_上

单页面应用程序 什么是单页面应用程序 单页面应用程序(英文名:Single Page Application)简称 SPA,顾 名思义,指的是一个 Web 网站中只有唯一的一个 HTML 页面,所有的 功能与交互都在这唯一的一个页面内完…

Java八股文(Element Plus)

Java八股文のElement Plus Element Plus Element Plus 什么是Element UI 和 Element Plus? Element UI 和 Element Plus 是基于 Vue.js 的一套非常受欢迎的开源 UI 组件库,用于快速构建具有现代化设计和丰富交互效果的前端界面。 Element UI 和 Element…

固态存储是未来|浅析SSD架构的演进与创新技术-2

除了性能和容量这两个最大的诉求外,其他的需求已经成为SSD现场架构的核心竞争力。 一是安全性:随着数据安全威胁日益严重,SSD的安全设计成为关键,包括提供单芯片硬件信任根、遵循FIPS140-3安全标准以及支持一次性可编程位字段来锁…

uni app 钓鱼小游戏

最近姑娘喜欢玩那个餐厅游戏里的钓鱼 &#xff0c;经常让看广告&#xff0c;然后就点点点... 自己写个吧。小鱼的图片自己搞。 有问题自己改&#xff0c;不要私信我 <template><view class"page_main"><view class"top_linear"><v…

react-native使用FireBase实现google登陆

一、前置操作 首先下载这个包 yarn add react-native-google-signin/google-signin 二、Google cloud配置 Google Cloud 去google控制台新建一个android项目&#xff0c;这时候需要用到你自己创建的keystore的sha1值&#xff0c;然后会让你下载一个JSON文件&#xff0c;先保…