【cpp题解】最大子数组和(53)

目录

  • 前言
  • 我的思路
    • 思路一
    • 思路二
  • 我的代码

前言

今天继续来学一学动态规划,一上来就遇到了网红题,据说是以前清北的考研题哈哈哈哈。挺难的,让我做的话,那就是双层循环暴力解,思路很巧妙,学到啦~

我的思路

思路一

设置两层暴力循环就不说了,我最开始想设置一个二维数组,把所有的子数组的和全部存进去,有点暴力,自不必说。

思路二

思路二就很巧妙了,我浅看了一眼以为我懂了,结果写出来的代码还是错的。我还是没有理解动态规划的本质,不知道写了个啥玩意,反正逻辑大大有问题。×

/*if (resArr[i - 1] + Arr[i] > resArr[i - 1]) {
	resArr[i] = resArr[i - 1] + Arr[i];
}
else {
	resArr[i] = resArr[i - 1];
}
if (resArr[i] > res) {
	res = resArr[i];
}*/

我们来说说正确的思路,其实最核心的点在于,我们需要找到 前一个状态和后一个状态之间链接的条件,比如我想找最长的子数组和,那么这个最长的和次长的不仅有**数值上的关系**还有**物理位置上的关系**

我们容易发现次长一定是在最长的前面,因此我们可以得知以i位置结束的子数组一定和i-1位置子数组有关。
即,如果i-1位置的子数组和大于0,那么我们i位置就可以加上i-1位置的和了(对i位置来说,我变大了有好处),如果小于0就我们就放弃这个"小拖油瓶”吧,直接令它为原数组中的值。

觉得简单吗?不,可并不。

我的代码

#include<iostream>
#include<vector>
using namespace std;

class solution {
public:
	int max_subArr_sum(vector<int> Arr) {
		int res= Arr[0];
		vector<int> resArr(Arr.size());
		resArr[0] = res;
		for (int i = 1; i < Arr.size(); i++) {
			/*if (resArr[i - 1] + Arr[i] > resArr[i - 1]) {
				resArr[i] = resArr[i - 1] + Arr[i];
			}
			else {
				resArr[i] = resArr[i - 1];
			}
			if (resArr[i] > res) {
				res = resArr[i];
			}*/
			if (resArr[i - 1] > 0) {
				resArr[i] = resArr[i - 1] + Arr[i];
			}
			else {
				resArr[i] = Arr[i];

			}
			if (resArr[i] > res) {
				res = resArr[i];
			}
		}
		return res;
	}
};

int main() {
	solution s;
	vector<int> Arr = { 1,2,3,-1,2,-1,20,-20,-10 };
	int x=s.max_subArr_sum(Arr);
	cout << x << endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【25届秋招备战C++】23种设计模式

【25届秋招备战C】23种设计模式 一、简介程序员的两种思维8大设计原则 二、具体23种设计模式2.1 创建型模式2.2 结构性模式2.3 行为型模式 三、常考模式的实现四、参考 一、简介 从面向对象谈起&#xff0c; 程序员的两种思维 底层思维:向下 封装&#xff1a;隐藏内部实现 多…

ASP.NET小型证券术语解释及翻译系统的设计与开发

摘 要 在系统设计上&#xff0c;综合各种翻译类型网站优缺点&#xff0c;设计出具有任何使用者都可添加术语信息的且只有管理员能够实现术语修改及删除等独特方式的术语查看管理系统。此方式能够使术语量快速增大&#xff0c;并且便于使用者及管理员操作&#xff0c;满足相互…

软件设计师-应用技术-面向对象程序设计题5

考题形式&#xff1a; 代码填空&#xff0c;5 - 6空&#xff0c;每空3分。 基础知识及技巧&#xff1a; 1. 类的定义&#xff1a; 2. 接口的定义&#xff1a; 给实现类具体代码&#xff0c;填写接口中方法。 3. 类、抽象类、继承类、抽象方法的定义&#xff1a; 抽象类&…

【管理咨询宝藏95】SRM采购平台建设内部培训方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏95】SRM采购平台建设内部培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 重点是建设一个适应战略采…

20240508请问GTX2080TI的300和300A核心的差异?

20240508请问GTX2080TI的300和300A核心的差异&#xff1f; 在拼多多/淘宝上&#xff0c;GTX2080TI的300A核心的会比300核心的贵100&#xffe5;左右。 但是怎么区分呢&#xff1f; 300a核心和300请问怎么区分呢&#xff1f;[嘻嘻] devicr ID diviceid 1e07是300a 1e04是300 Gp…

2024041702-计算机操作系统 - 死锁

计算机操作系统 - 死锁 计算机操作系统 - 死锁 必要条件处理方法鸵鸟策略死锁检测与死锁恢复 1. 每种类型一个资源的死锁检测2. 每种类型多个资源的死锁检测3. 死锁恢复 死锁预防 1. 破坏互斥条件2. 破坏占有和等待条件3. 破坏不可抢占条件4. 破坏环路等待 死锁避免 1. 安全状态…

使用 Parallels Desktop 在 Mac 上畅玩 PC 游戏

我们不再需要接受 “Mac 不是为游戏而打造” 这一事实&#xff1b;Parallels Desktop 通过将电脑变成高性能的游戏设备&#xff0c;从而改变了一切。 Parallels Desktop 充分利用 Mac 硬件的强大功能&#xff0c;让您无缝畅玩 Windows 专享游戏。 性能得到提升&#xff0c;可玩…

基于 llama2 的提示词工程案例2

优化大型语言模型&#xff08;LLMs&#xff09; 优化大型语言模型&#xff08;LLMs&#xff09;中的提示词&#xff08;prompts&#xff09;是提高模型性能和输出相关性的重要手段。以下是一些优化提示词的方向&#xff1a; 明确性&#xff1a;确保提示词清晰明确&#xff0c;…

数据湖与数据网格:引领组织数据策略的未来

十多年来&#xff0c;组织已经采用数据湖来克服数据仓库的技术限制&#xff0c;并发展成为更加以数据为中心的实体。虽然许多组织已经使用数据湖来探索新的数据用例并改进其数据驱动的方法&#xff0c;但其他组织发现所承诺的好处很难实现。因此&#xff0c;许多数据湖计划的有…

SOLIDWORKS Electrical电气元件智能开孔

实际的电气元器件安装中&#xff0c;一些元器件需要穿过孔洞安装&#xff0c;例如按钮、指示灯会在配电柜的控制面板上&#xff0c;需要穿过控制面板安装。这部分内容放在软件建模、装配时&#xff0c;往往比较复杂因为考虑孔的大小符合元器件规格、孔跟随元器件移动、同一元器…

CR80清洁卡的重要性

在我们日常生活中&#xff0c;身份证、银行卡、信用卡等塑料卡片已经成为了不可或缺的一部分。这些卡片通常符合CR80标准&#xff0c;这意味着它们的尺寸和厚度符合国际标准&#xff0c;为了保证这些卡片的读取和使用效果&#xff0c;清洁维护显得尤为重要。 什么是CR80卡&…

Linux学习之禁用防火墙

查看防火墙状态 systemctl status firewalld.service 第一行前面的圆圈是有颜色的就是开启状态 黑色的就是关闭状态 关闭防火墙 systemctl stop firewalld.service 输入密码认证 再次查看防火墙状态 systemctl status firewalld.service 第一行前面的圆圈变成黑色说明关闭…

杰理-701-单线灯-ws2812-驱动

杰理-701-单线灯-ws2812-驱动 LED_gradual_open(); //调用后 呼吸灯 set_led_colour&#xff08;R,G,B&#xff09;&#xff1b;//具体颜色 spi_dma_set_addr_for_isr //spi 配置dma 后灯才亮 #define LED_H 0x7c #define LED_L 0x40 发送高位和地位的字节&#xff0c;具体…

UP互助 帮助UP起号做视频 支持B站和抖音

【软件名字】&#xff1a;UP互助 【软件版本】&#xff1a;1.0 【软件大小】&#xff1a;17.5MB 【软件平台】&#xff1a;安卓 【测试机型】&#xff1a;小米9 1.随便登个邮箱&#xff0c;添加自己平台的频道&#xff0c;然后就可以帮助别人&#xff0c;添加频道后在添加…

仓库管理系统需求调研要点

仓库管理系统需求调研 一、仓库的作用 仓库分类 原材料仓库&#xff1a;用于存放生产所需的原材料和零部件&#xff0c;需要保持原材料的质量和数量稳定。半成品仓库&#xff1a;存放生产过程中的半成品和在制品&#xff0c;需要保持良好的生产流程和及时出库。成品仓库&#x…

【Arduino IDE 2】Windows平台安装ESP8266 NodeMCU LittleFS Uploader(文件上传插件)

在Arduino IDE 2&#xff08;2.2.1或更高版本&#xff09;上&#xff0c;如何安装基于ESP8266 NodeMCU的LittleFS文件系统上传插件&#xff0c;以及如何将文件上传到ESP8266 NodeMCU板文件系统。 一、LittleFS简介 LittleFS是一个为微控制器创建的轻量级文件系统&#xff0c;可…

智慧校园能解决什么问题?

智慧校园是学校信息化建设的基础载体&#xff0c;他将校园工作的各个业务模块融合&#xff0c;形成一个有机的整体。同时智慧校园又一种先进的教育管理模式&#xff0c;它利用信息技术如物联网、大数据、云计算、人工智能等&#xff0c;来提升教育质量和管理效率。 同时&#…

RabbitMQ(Docker 单机部署)

序言 本文给大家介绍如何使用 Docker 单机部署 RabbitMQ 并与 SpringBoot 整合使用。 一、部署流程 拉取镜像 docker pull rabbitmq:3-management镜像拉取成功之后使用下面命令启动 rabbitmq 容器 docker run \# 指定用户名-e RABBITMQ_DEFAULT_USERusername \# 指定密码-e R…

Java_异常

介绍 编译时异常&#xff1a; 除RuntimeException和他的子类&#xff0c;其他都是编译时异常。编译阶段需要进行处理&#xff0c;作用在于提醒程序眼 运行时异常&#xff1a; RuntimeException本身和其所有子类&#xff0c;都是运行时异常。编译阶段不报错&#xff0c;是程序…

【Linux】gcc/g++的使用

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中gcc/g使用的相关内容。 如果看到最后您觉得这篇文章写得不错…
最新文章