DP—子数组,子串系列 第一弹 -最大子数组和 -环形子数组的最大和 力扣

   你好,欢迎阅读我的文章~

个人主页:@Mike

  所属专栏:动态规划

 

 


53. 最大子数组和

最大子数组和

分析:

使用动态规划解决

状态表示:

        1.以某个位置为结尾

        2.以某个位置为起点

这里使用以某个位置为结尾,结合题目要求,定义的状态表示为:

dp[i]表示:以i位置为结尾的所有子数组中的最大和。

 

dp[i]的所有可能有两种情况

(1).子数组长度为1:此时dp[i]=nums[i];

(2).子数组的长度大于1:此时dp[i]应该等于以i-1为结尾的所有子数组中和的最大值再加上nums[i],也就是dp[i-1]+nums[i]。

因为我们求最大值,所以我们对这两种情况取最大值即可

dp[i]=max(nums[i],dp[i-1]+nums[i]);

代码:

class Solution {
public:int maxSubArray(vector<int>& nums) {int n=nums.size();vector<int>dp(n+1);int ans=INT_MIN;for(int i=1;i<=n;i++){dp[i]=nums[i-1];dp[i]=max(dp[i],dp[i-1]+nums[i-1]);ans=max(ans,dp[i]);}return ans;}
};


动态规划

环形子数组的最大和

分析:

使用动态规划解决

算法思路:

本题与 最大子数组和 的区别在于,考虑问题的时候不仅要分析 数组内的连续区域 ,还要考
数组首尾相连 的一部分。结果的可能情况分为以下两种

1.结果在数组的内部,包括整个数组。

2.结果在数组首尾相连的一部分上。

对于第一种情况,我们只需按照最大子数组和的方法做即可。

对于第二种情况,我可以换一种思路,既然不在数组的内部的一段,那么我们求出数组的总和,然后在求出数组内的最小子数组和数组总和减去数组内的最小子数组和就是首尾相连的最大和

状态表示:

第二种情况:

g[i]表示:以i为结尾的所有子数组中和的最小值。

状态转移方程:

g[i]的所有可能有以下两种情况:

(1).子数组长度为1:此时g[i]=nums[i]

(2).子数组的长度大于1:此时g[i]应该等于以i-1为结尾的所有子数组中和的最小值再加上nums[i]。也就是g[i-1]+nums[i]。

转移方程为:

g[i]=min(nums[i],g[i-1]+nums[i])

代码:

class Solution {
public:int maxSubarraySumCircular(vector<int>& nums) {int n = nums.size();vector<int> maxx(n + 1);vector<int> g(n + 1);int temp1 = INT_MIN;int temp2 = INT_MAX;int sum=0;for(auto num:nums){sum+=num;}for (int i = 1; i <= n; i++) {maxx[i] = max(nums[i - 1], maxx[i - 1] + nums[i - 1]);temp1 = max(temp1, maxx[i]);}for (int i = 1; i <= n; i++) {g[i] = min(nums[i - 1], g[i - 1] + nums[i - 1]);temp2 = min(temp2, g[i]);if(temp2==sum){return temp1;}}return max(sum-temp2,temp1);//情况1和情况2取最大值}
};

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

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

相关文章

MySQL8.0主从同步报ERROR 13121错误解决方法

由于平台虚拟机宿主机迁移&#xff0c;导致一套MySQL主从库从节点故障&#xff0c;从节点服务终止&#xff0c;在服务启动后&#xff0c;恢复从节点同步服务&#xff0c;发现了如下报错&#xff1a; mysql> show slave status\G; *************************** 1. row *****…

GDAL+C#实现矢量多边形转栅格

1. 开发环境测试 参考C#配置GDAL环境&#xff0c;确保GDAL能使用&#xff0c;步骤简述如下&#xff1a; 创建.NET Framework 4.7.2的控制台应用 注意&#xff1a; 项目路径中不要有中文&#xff0c;否则可能报错&#xff1a;can not find proj.db 在NuGet中安装GDAL 3.9.1和G…

OSI参考模型详解:初学者指南与实践案例

OSI参考模型详解&#xff1a;初学者指南与实践案例 OSI&#xff08;Open System Interconnect&#xff09;参考模型是一个由国际标准化组织&#xff08;ISO&#xff09;提出的七层网络分层模型&#xff0c;它为全球所有互联计算机系统提供了一个通用的通信框架&#xff0c;解决…

【Mysql】-锁机制-GAP锁

在 MySQL 的 InnoDB 存储引擎中&#xff0c;Gap 锁&#xff08;间隙锁&#xff09;是一种用于防止幻读的锁机制。幻读是指在一个事务中&#xff0c;多次执行相同的查询&#xff0c;结果集却不同&#xff0c;通常是由于其他事务插入了新的行。为了防止这种情况&#xff0c;InnoD…

无人机之自主飞行关键技术篇

无人机自主飞行指的是无人机利用先进的算法和传感器&#xff0c;实现自我导航、路径规划、环境感知和自动避障等能力。这种飞行模式大大提升了无人机的智能化水平和操作的自动化程度。 一、传感器技术 传感器是无人机实现自主飞行和数据采集的关键组件&#xff0c;主要包括&a…

软考-软件设计师(10)-专业英语词汇汇总与新技术知识点

场景 以下为高频考点、知识点汇总。 软件设计师上午选择题知识点、高频考点、口诀记忆技巧、经典题型汇总: 软考-软件设计师(1)-计算机基础知识点:进制转换、数据编码、内存编址、串并联可靠性、海明校验码、吞吐率、多媒体等: 软考-软件设计师(1)-计算机基础知识点:进制…

C语言复习第3章 函数

目录 一、函数介绍1.1 函数是什么1.2 C语言中函数的分类1.3 函数原型1.4 高内聚 低耦合1.5 C语言main函数的位置 二、函数的参数2.1 实参和形参2.2 函数的参数(实参)可以是表达式2.3 传值与传址(swap函数)2.4 明确形参是实参的临时拷贝2.5 void(如果不写函数返回值 默认是int)2…

python 爬虫 入门 三、登录以及代理。

目录 一、登录 &#xff08;一&#xff09;、登录4399 1.直接使用Cookie 2.使用账号密码进行登录 可选观看内容&#xff0c;使用python对密码进行加密&#xff08;无结果代码&#xff0c;只有过程分析&#xff09; 二、代理 免费代理 后续&#xff1a;协程&#xff0c;…

如何在OceanBase中新增系统变量及应用实践

因为系统变量涉及复杂的工程文件&#xff0c;为防止新增变量操作对软件系统的潜在影响&#xff0c;OceanBase为多数开发者设计了一套高效的编程框架。此框架允许开发者在新增及使用系统变量时&#xff0c;仅需专注于变量定义的细节。具体来说&#xff0c;通过运行一个Python脚本…

树莓派设置中文界面

树莓派设置中文界面 1.安装中文字体。 执行命令&#xff1a;sudo apt-get -y install ttf-wqy-zenhei 2.设置显示中文。 执行命令&#xff1a;sudo raspi-config 选择&#xff1a;4 Localisation Options --> 1 Change Locale 按空格键在前面打勾或去掉勾&#xff0…

Windows 11开发环境搭建与应用开发实践

1. 引言 随着微软发布Windows 11,操作系统领域迎来了许多新的功能和变化。Windows 11不仅优化了用户界面,还强化了性能与安全性,增加了对开发者友好的特性,使其成为一个理想的开发平台。无论是桌面应用、Web应用,还是跨平台移动应用,Windows 11都为开发者提供了强大的支…

企业级调度器 LVS

集群和分布式基础知识 系统性能的扩展方式 当一个系统&#xff0c;或一个服务的请求量达到一定的数量级的时候&#xff0c;运行该服务的服务器的性能和资源上限&#xff0c; 很容易成为其性能瓶颈。除了性能问题之外&#xff0c;如果只部署在单台服务器上&#xff0c;在此服务…

gitee建立/取消关联仓库

目录 一、常用指令总结 二、建立关联具体操作 三、取消关联具体操作 一、常用指令总结 首先要选中要关联的文件&#xff0c;右击&#xff0c;选择Git Bash Here。 git remote -v //查看自己的文件有几个关联的仓库git init //初始化文件夹为git可远程建立链接的文件夹…

uniapp uni.uploadFile errMsg: “uploadFile:fail

uniapp 上传后一直显示加载中 1.检查前后端上传有无问题 2.检查失败信息 await uni.uploadFile({url,filePath,name,formData,header,timeout: 30000000, // 自定义上传超时时间fail: async function(err) {$util.hideAll()// 失败// err 返回 {errMsg: "uploadFile:fai…

速盾:cdn能加速游戏吗?

CDN&#xff08;内容分发网络&#xff09;是一种通过分布在全球不同地区的服务器来缓存和传输网络内容的技术。它的主要目的是提高内容的传输速度和用户体验。虽然CDN主要用于加速网站的访问和内容传输&#xff0c;但它也可以应用于游戏加速。 在传统的在线游戏中&#xff0c;…

SpringCloud学习:Openfeign组件实现服务调用和负载均衡

OpenFeign&#xff1a;服务调用与负载均衡&#xff08;服务端接口&#xff09; 是什么&#xff1a;通过OpenFeign可以实现服务调用和负载均衡 OpenFeign是一个声明性web服务客户端&#xff0c; 怎么用&#xff1a;服务提供者提取公共接口用FrignClient标注&#xff0c;服务调…

【Flutter】基础入门:开发环境搭建

Flutter 是一个强大的跨平台框架&#xff0c;支持在 Android、iOS、Windows、Linux、Web 等多种平台上开发应用。下面将详细介绍如何在各个平台上构建 Flutter 开发环境&#xff0c;并使用相同的项目代码构建出一个可以在多个平台运行的跨平台 Demo。 Flutter 环境配置&#x…

浙大数据结构全题解汇总(C++实现)

浙大MOOC练习题题解汇总链接 浙大数据结构&#xff1a;01-复杂度1 最大子列和问题 浙大数据结构&#xff1a;01-复杂度2 Maximum Subsequence Sum 浙大数据结构&#xff1a;01-复杂度3 二分查找 浙大数据结构&#xff1a;02-线性结构1 两个有序链表序列的合并 浙大数据结构&am…

kernel32.dll下载地址:如何安全地恢复系统文件

关于从网络上寻找kernel32.dll的下载地址&#xff0c;这通常不是一个安全的做法&#xff0c;而且可能涉及到多种风险。kernel32.dll是Windows操作系统的核心组件之一&#xff0c;负责内存管理、进程和线程管理以及其他关键系统功能。因为kernel32.dll是系统的基础文件&#xff…

信息安全工程师(57)网络安全漏洞扫描技术与应用

一、网络安全漏洞扫描技术概述 网络安全漏洞扫描技术是一种可以自动检测计算机系统和网络设备中存在的漏洞和弱点的技术。它通过使用特定的方法和工具&#xff0c;模拟攻击者的攻击方式&#xff0c;从而检测存在的漏洞和弱点。这种技术可以帮助组织及时发现并修补漏洞&#xff…