代码随想录训练营第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,论文写作神器~ https://www.aipapergpt.com/ 你是不是已经为毕业论文的选题愁得头发都要掉光了?每次打开文档,都觉得什么都想写,又好像什么都写不了。选题看起来很简单,但真正开始动手的时候,…...

[QT]记事本项目(信号槽,QT基础控件,QT文件操作,QT关键类,对话框,事件)
一.UI界面搭建 (ui界面使用,界面布局,各控件介绍,界面大小调整) 二.信号槽机制实现文件的打开,保存,退出 (信号槽,QFile文件类,QTextStream类,QFileDialog文件对话框࿰…...

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. 注意事项:…...

21. 什么是MyBatis中的N+1问题?如何解决?
N1 问题是指在进行一对多查询时,应用程序首先执行一条查询语句获取结果集(即 1),然后针对每一条结果,再执行 N 条额外的查询语句以获取关联数据。这个问题通常出现在 ORM 框架(如 MyBatis 或 Hibernate&…...

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

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

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

数据结构之抽象数据类型(c语言版)
抽象数据类型的定义格式如下: ADT 抽象数据类型名{数据对象:<数据对象的定义>数据关系:<数据关系的定义>基本操作:<基本操作的定义> }ADT 抽象数据类型名 下面以复数为例给出完整的抽象数据类型的定义 ADT C…...

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

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

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

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 列的移动 在现代网页设计中,布局是构建用户界面的基石。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、表格处理程序示例 表格处理程序是一个二维的“细胞”网格,每个格子包含了一个数字或者字符串。专业的表格处理程序比如微软的Excel提供了执行数学运算的能力,比如计算格子中的值的和。表格处理程序示例无意挑战微软的市场地位,但是对于演示…...

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

高级实时通信:基于 Python 的 WebSocket 实现与异步推送解决方案
高级实时通信:基于 Python 的 WebSocket 实现与异步推送解决方案 目录 🟢 WebSocket 协议概述🔵 在 FastAPI 中实现 WebSocket🟣 Django Channels 实现异步实时通信🔴 使用 Redis 实现实时推送 🟢 1. WebS…...

大二上学期详细学习计划
本学习完成目标: 项目: 书籍:《mysql必知必会》《java核心技术卷》(暂时)加强JavaSE的学习,掌握Java核心Mysqlsql(把牛客上的那50道sql语句题写完)gitmaven完成springboot项目&…...

Kafka【十四】生产者发送消息时的消息分区策略
【1】分区策略 Kafka中Topic是对数据逻辑上的分类,而Partition才是数据真正存储的物理位置。所以在生产数据时,如果只是指定Topic的名称,其实Kafka是不知道将数据发送到哪一个Broker节点的。我们可以在构建数据传递Topic参数的同时ÿ…...

SQL优化:执行计划详细分析
视频讲解:SQL优化:SQL执行计划详细分析_哔哩哔哩_bilibili 1.1 执行计划详解 id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1.1.1 ID 【概…...

Android Studio -> Android Studio 获取release模式和debug模式的APK
Android Studio上鼠标修改构建类型 Release版本 激活路径:More tool windows->Build Variants->Active Build Variant->releaseAPK路径:Project\app\build\intermediates\apk\app-release.apk Debug版本 激活路径:More tool w…...

基于 SpringBoot 的实习管理系统
专业团队,咨询送免费开题报告,大家可以来留言。 摘 要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,实习管理也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越…...

vmware workstation 17 linux版
链接: https://pan.baidu.com/s/1F3kpNEi_2GZW0FHUO-8p-g?pwd6666 提取码: 6666 1 先安装虚拟机 不管什么错误 先安装vmware workstation 17 2 编译 覆盖安装vmware-host-modules-workstation-17.5.1 只需这样就可以 # sudo apt install dkms build-essential bc iw…...

Windows环境本地部署Oracle 19c及卸载实操手册
前言: 一直在做其他测试,貌似都忘了Windows环境oracle 19c的部署,这是一个很早很早的安装记录了,放上来做个备录给到大家参考。 Oracle 19c:进一步增强了自动化功能,并提供了更好的性能和安全性。这个版本在自动化、性能和安全性方面进行了重大改进,以满足现代企业对数…...

MapStruct介绍
一、MapStruct 1.1何为MapStruct 要说这个东西,其实和我们刚刚讲到的Lombok相类似。其是由我们的源代码加上MapStruct经过编译后得到.class文件,文件中自动补全了代码。那么补全了什么代码?实现了什么功能? MapStruct的产生&…...

35天学习小结
距离上次纪念日,已经过去了35天咯 算算也有5周了,在这一个月里,收获的也挺多,在这个过程中认识的大佬也是越来越多了hh 学到的东西,其实也没有很多,这个暑假多多少少还是有遗憾的~ 第一周 学习了一些有…...

【iOS】UIViewController的生命周期
UIViewController的生命周期 文章目录 UIViewController的生命周期前言UIViewController的一个结构UIViewController的函数的执行顺序运行代码viewWillAppear && viewDidAppear多个视图控制器跳转时的生命周期pushpresent 小结 前言 之前对于有关于UIViewControlller的…...