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

代码随想录训练营第29天|控制变量

134. 加油站

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int cur=0, total=0, start=0;for(int i=0; i<gas.size(); i++){cur+=gas[i]-cost[i];total+=gas[i]-cost[i];if(cur<0){start=i+1;cur=0;}}if(start>=gas.size())return -1;if(total<0)return -1;return start;   }
};

cur用来累计新的起点下,所有油站的净利, 如果累计到i【首次】出现负值,则符合要求的起点一定在i后面。

反证法:

假设i之前存在一个符合题意的起点j(old_start<j<i),即在[j,i]的累计和为正,又因为[old_start,i]的累计和为负,则[old_start, j]区间内的累计和一定为负,换句话说,累计到小于i的j时,就已经出现了负值,这与i的【首次】性矛盾。

for循环结束后,start指向第一个在其之后累计和为正的位置(因为一旦遇到负就会更新start),此时该累计和表示后半段的盈利额,若全局盈利(total为正),则一定可以覆盖前半段的开支。

135. 分发糖果

class Solution {
public:int candy(vector<int>& ratings) {int n=ratings.size();vector<int> nums(n,1);for(int i=1; i<n; i++){if(ratings[i]>ratings[i-1])nums[i]=nums[i-1]+1;}for(int i=n-2; i>=0; i--){if(ratings[i]>ratings[i+1])nums[i]=max(nums[i],nums[i+1]+1);}return accumulate(nums.begin(),nums.end(),0);}
};

题目要求比相邻大,可以拆解为【比前面大】和【比后面大】两个子问题:

从前往后扫,假定前置元素已经符合要求,解决比前面大的问题;

然后,从后往前扫,假定后置元素已符合,解决比后面大的问题。

860. 柠檬水找零

class Solution {
public:bool lemonadeChange(vector<int>& bills) {unordered_map<int,int> remain;for(auto& bill:bills){remain[bill]++;if(bill==10){remain[5]--;if(remain[5]<0)return false;}else if(bill==20){if(remain[10]>0){remain[10]--;remain[5]--;if(remain[5]<0)return false;}else{remain[5]-=3;if(remain[5]<0)return false;}}}return true;}
};

贪心思想,遇到20的bill,优先使用10块找零,5块是最灵活的,省着用。

406. 根据身高重建队列

class Solution {
public:static bool cmp(vector<int>& a, vector<int>& b){if(a[0]==b[0])return a[1]<b[1];return a[0]>b[0];}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(),people.end(),cmp);list<vector<int>> result;for(auto& p:people){int idx=p[1];auto it=result.begin();for(int i=0; i<idx; i++)it++;result.insert(it,p);}return vector<vector<int>>(result.begin(),result.end());}
};

需要频繁插入元素使用了list数据结构,根据身高降序排列后依次处理,考虑一个新的元素p(当前最小),根据要求的索引idx,直接插入指定位置,该操作的合理性:

1.list里元素都是大于p的,自然有idx之前的也大于p,即p这个元素是合理的。

2.考虑插入p后,p之前的元素,因为相对顺序较插入前没有变化,所以保持合理。

3.考虑插入p后,p之后的元素,虽然相较插入前有整体的后移,但是由于p是最小的,而idx记录的是大于元素的个数,因此p不会产生贡献,即idx不需要变化,因此也是合理的。

相关文章:

代码随想录训练营第29天|控制变量

134. 加油站 class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int cur0, total0, start0;for(int i0; i<gas.size(); i){curgas[i]-cost[i];totalgas[i]-cost[i];if(cur<0){starti1;cur0;}}if(start>gas…...

毕业论文选题难?5招帮你轻松搞定选题!

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 你是不是已经为毕业论文的选题愁得头发都要掉光了&#xff1f;每次打开文档&#xff0c;都觉得什么都想写&#xff0c;又好像什么都写不了。选题看起来很简单&#xff0c;但真正开始动手的时候&#xff0c;…...

[QT]记事本项目(信号槽,QT基础控件,QT文件操作,QT关键类,对话框,事件)

一.UI界面搭建 (ui界面使用&#xff0c;界面布局&#xff0c;各控件介绍&#xff0c;界面大小调整) 二.信号槽机制实现文件的打开&#xff0c;保存&#xff0c;退出 (信号槽&#xff0c;QFile文件类&#xff0c;QTextStream类&#xff0c;QFileDialog文件对话框&#xff0…...

redis基本数据结构-hash

这里写自定义目录标题 1. redis的数据结构hash1.1 Hash 数据结构的特点1.2 常见命令1.3 适用示例 2. 常见业务场景2.1 用户信息存储2.1.1 场景2.1.2 优势2.1.3 解决方案2.1.4 代码实现 2.2 购物车管理2.2.1 背景2.2.2 优势2.2.3 解决方案2.2.4 代码实现 3. 注意事项&#xff1a…...

21. 什么是MyBatis中的N+1问题?如何解决?

N1 问题是指在进行一对多查询时&#xff0c;应用程序首先执行一条查询语句获取结果集&#xff08;即 1&#xff09;&#xff0c;然后针对每一条结果&#xff0c;再执行 N 条额外的查询语句以获取关联数据。这个问题通常出现在 ORM 框架&#xff08;如 MyBatis 或 Hibernate&…...

天空卫士项目荣获“2024 IDC 中国20大杰出安全项目 ”奖项 ,实力见证安全守护

9月11日&#xff0c; IDC在上海圆满举办安全风险管控峰会&#xff0c;并现场官宣“2024 IDC中国20大杰出安全项目(CSO20) ”和“2024 IDC中国 CSO名人堂 (十大人物) ” 奖项名单。联通软研院申报的联通邮件系统安全合规建设项目被评为“2024 IDC中国20大杰出安全项目(CSO20) ”…...

Android生成Java AIDL

AIDL:Android Interface Definition Language AIDL是为了实现进程间通信而设计的Android接口语言 Android进程间通信有多种方式&#xff0c;Binder机制是其中最常见的一种 AIDL的本质就是基于对Binder的运用从而实现进程间通信 这篇博文从实战出发&#xff0c;用一个尽可能…...

嵌入式数据库sqlite和rocksdb的介绍以及对比

SQLite 和 RocksDB 都是非常流行的嵌入式数据库系统&#xff0c;但它们的设计理念和应用场景有所不同。下面是对这两个数据库系统的详细介绍以及它们之间的主要区别。 SQLite 简介 SQLite 是一个轻量级的关系数据库管理系统&#xff0c;完全由 C 语言编写而成。它以单一文件…...

数据结构之抽象数据类型(c语言版)

抽象数据类型的定义格式如下&#xff1a; ADT 抽象数据类型名{数据对象&#xff1a;<数据对象的定义>数据关系&#xff1a;<数据关系的定义>基本操作&#xff1a;<基本操作的定义> }ADT 抽象数据类型名 下面以复数为例给出完整的抽象数据类型的定义 ADT C…...

《ChatTTS一键安装详细教程》

ChatTTS 属于一种依托深度学习的文本转语音技术&#xff0c;能够把文本内容转换成自然且流畅&#xff0c;宛如真人发声的语音。ChatTTS 可以更出色地领会&#xff0c;理解文本所蕴含的情感、语调和语义&#xff0c;进而在语音输出时展现出更为精准和鲜活的各种情感。借助对大规…...

物联网之ESP32配网方式、蓝牙、WiFi

MENU 前言SmartConfig(智能配网)AP模式(Access Point模式)蓝牙配网Web Server模式WPS配网(Wi-Fi Protected Setup)Provisioning(配网服务)静态配置(硬编码)总结 前言 ESP32配网(Wi-Fi配置)的方式有多种&#xff0c;每种方式都有各自的优缺点。 根据具体项目需求&#xff0c;可以…...

golang 字符串浅析

go的字符串是只读的 测试源代码 package mainimport ("fmt""unsafe" )func swap(x, y string) (string, string) {return y, x }func print_string(obj *string, msg string) {string_ptr : (*[2]uintptr)(unsafe.Pointer(obj))first_obj_addr : string_…...

jantic/DeOldify部署(图片上色)附带Dockerfile和镜像

1. 克隆代码到DeOldify git clone https://github.com/jantic/DeOldify.git DeOldifyDeOldify源码 2. 安装依赖 这里会安装python以及创建deoldify环境 cd DeOldify conda env create -f environment.yml(base) rootDESKTOP-1FOD6A8:~/DeOldify# conda env create -f environm…...

2024年9月9日--9月15日(freex源码抄写+ue5肉鸽视频一节调节)

现在以工作为中心&#xff0c;其他可以不做硬性要求。周一到周四&#xff0c;晚上每天300行freex源码抄写&#xff0c;周六日每天1000行。每周3200行&#xff0c;每天完成该完成的即可&#xff0c;早上有时间时进行一小节独立游戏相关的视频教程作为调节即可&#xff0c;不影响…...

CLIP官方github代码详解

系列文章目录 文章目录 系列文章目录一、Usage1、conda install --yes -c pytorch pytorch1.7.1 torchvision cudatoolkit11.02、代码3、 二、1、2、3、 三、1、2、3、 四、1、2、3、 五、1、2、3、 六、1、2、3、 七、1、2、3、 八、1、2、3、 一、Usage 1、conda install --…...

ElementUI 布局——行与列的灵活运用

ElementUI 布局——行与列的灵活运用 一 . 使用 Layout 组件1.1 注册路由1.2 使用 Layout 组件 二 . 行属性2.1 栅格的间隔2.2 自定义元素标签 三 . 列属性3.1 列的偏移3.2 列的移动 在现代网页设计中&#xff0c;布局是构建用户界面的基石。Element UI 框架通过其强大的 <e…...

Docker快速部署Apache Guacamole

Docker快速部署Apache Guacamole ,实现远程访问 git clone "https://github.com/boschkundendienst/guacamole-docker-compose.git" cd guacamole-docker-compose ./prepare.sh docker-compose up -dhttps://IP地址:8443/ 用户名:guacadmin 密码:guacadmin docker …...

C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(1)

1、表格处理程序示例 表格处理程序是一个二维的“细胞”网格&#xff0c;每个格子包含了一个数字或者字符串。专业的表格处理程序比如微软的Excel提供了执行数学运算的能力&#xff0c;比如计算格子中的值的和。表格处理程序示例无意挑战微软的市场地位&#xff0c;但是对于演示…...

es6中set和map的区别

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;Set 和 Map 是两种新的集合类型&#xff0c;它们提供了更高级的数据结构来存储唯一值或键值对集合。尽管它们在功能上有些相似&#xff0c;但它们在用途和内部机制上存在一些关键区别。 1. 基本概念 Set&#xff1…...

高级实时通信:基于 Python 的 WebSocket 实现与异步推送解决方案

高级实时通信&#xff1a;基于 Python 的 WebSocket 实现与异步推送解决方案 目录 &#x1f7e2; WebSocket 协议概述&#x1f535; 在 FastAPI 中实现 WebSocket&#x1f7e3; Django Channels 实现异步实时通信&#x1f534; 使用 Redis 实现实时推送 &#x1f7e2; 1. WebS…...

Video2X问答指南:用AI无损放大视频的10个常见问题解答

Video2X问答指南&#xff1a;用AI无损放大视频的10个常见问题解答 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/…...

3个简单步骤,用SMUDebugTool彻底解决AMD Ryzen系统稳定性问题

3个简单步骤&#xff0c;用SMUDebugTool彻底解决AMD Ryzen系统稳定性问题 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: htt…...

AVR微控制器通用驱动库VitconCommon详解

1. VitconCommon 库概述VitconCommon 是一个面向 AVR 微控制器平台的底层通用函数库集合&#xff0c;由 Vitcon 团队开发并维护&#xff0c;作为其系列外设驱动库&#xff08;如 VitconGP2Y0A21YK、VitconSAA1064T 等&#xff09;的公共依赖基础。该库不提供独立的应用层功能&a…...

Iono系列工业PLC模块:Arduino生态的工业级演进

1. Iono Uno/MKR/RP 系统概述Iono 系列&#xff08;Iono Uno、Iono MKR、Iono RP&#xff09;并非传统意义的开发板&#xff0c;而是一套面向工业现场的可编程逻辑控制器&#xff08;PLC&#xff09;级输入/输出模块。其核心设计哲学是将 Arduino 生态的易用性、丰富库资源与工…...

Docker vs Pip:MinerU本地部署全攻略,哪种方式更适合你的PDF解析需求?

Docker与Pip部署MinerU深度对比&#xff1a;如何为PDF解析选择最佳方案 在文档自动化处理领域&#xff0c;PDF解析工具的选择往往直接影响工作效率。MinerU作为一款开源的PDF解析工具&#xff0c;因其对复杂排版的良好支持而受到开发者青睐。但面对Pip和Docker两种主流部署方式…...

PROFINET通信进阶:S7-1200作为服务器与S7-200 SMART的高效数据交换

PROFINET通信进阶&#xff1a;S7-1200作为服务器与S7-200 SMART的高效数据交换 在工业自动化领域&#xff0c;PROFINET通信协议因其高实时性和稳定性而广受青睐。当S7-1200 PLC作为服务器与S7-200 SMART进行数据交换时&#xff0c;如何优化通信性能成为工程师们关注的焦点。本文…...

GitLab vs Gitea 深度解析:如何选择适合你的代码托管方案?

1. 核心定位与适用场景对比 第一次接触代码托管平台时&#xff0c;我和很多开发者一样在GitLab和Gitea之间纠结。经过三年在不同规模团队的实际使用&#xff0c;我发现这两个工具就像瑞士军刀和美工刀的关系——没有绝对的好坏&#xff0c;关键看你要切什么。 GitLab更像是个&q…...

SQL视图实战:5个真实业务场景下的数据视图应用案例(附代码)

SQL视图实战&#xff1a;5个真实业务场景下的数据视图应用案例&#xff08;附代码&#xff09; 在数据驱动的业务环境中&#xff0c;SQL视图&#xff08;View&#xff09;就像给数据库操作装上了"快捷方式"按钮。想象一下&#xff0c;当市场部门需要实时销售数据时&a…...

Photoshop AI绘画革命:3分钟学会Auto-Photoshop-StableDiffusion-Plugin终极指南

Photoshop AI绘画革命&#xff1a;3分钟学会Auto-Photoshop-StableDiffusion-Plugin终极指南 【免费下载链接】Auto-Photoshop-StableDiffusion-Plugin A user-friendly plug-in that makes it easy to generate stable diffusion images inside Photoshop using either Automa…...

从‘玩具项目’到‘线上产品’:我的Vue3项目在阿里云ECS上线的完整踩坑记录(含Nginx配置)

从本地开发到云端部署&#xff1a;Vue3项目实战全流程解析 第一次将自己的Vue项目部署到线上时&#xff0c;我盯着浏览器里那个404错误页面整整发呆了十分钟。作为一个刚完成基础学习的开发者&#xff0c;我原以为按照教程一步步操作就能顺利上线&#xff0c;但现实却给了我当头…...