代码随想录训练营day29|134.加油站,135. 分发糖果,860.柠檬水找零,406.根据身高重建队列

devtools/2024/10/25 18:28:44/

加油站

想法:暴力遍历?

好吧第一遍写的时候读错题意了,以为是比较gas[i]与cost[i+1]的值,shit。

int sum1=0,sum2=0;
for(int g:gas)sum1+=g;for(int c:cost)sum2+=c;if(sum1<sum2)return -1;//如果gas没cost多int youliang=0;int n=gas.size();for(int i=0;i<n;i++){int count=0;youliang=0;//每一次要记得重置for(int j=i;count<n;count++){if(j==n)j=0;//用来解决循环youliang+=gas[j];if(youliang>=cost[j]){youliang-=cost[j];j++;}elsebreak;if(count==n)return i;}return -1;

但这样碰到大数据时会超时。
如果从i开始到j处不满足,那从i+1处必然时不满足的,因为i处是在积累油量,这个想法就和之前求最大连续子数组和一样,直接果断舍弃,让i=j,然后下一次i++,就从下一处开始

分发糖果

好吧,这题我确实没啥思路。。。
这是力扣上的官解给出的:
我们可以将「相邻的孩子中,评分高的孩子必须获得更多的糖果」这句话拆分为两个规则,分别处理。
左规则:当 ratings[i−1]<ratings[i] 时,i 号学生的糖果数量将比 i−1 号孩子的糖果数量多。
右规则:当 ratings[i]>ratings[i+1] 时,i 号学生的糖果数量将比 i+1 号孩子的糖果数量多。
代码倒是不难写,主要这思路好难想

		vector<int> candy(ratings.size());candy[0]=1;for(int i=1;i<ratings.size();i++){if(ratings[i]>ratings[i-1]){candy[i]=candy[i-1]+1;}elsecandy[i]=1;}for(int i=ratings.size()-2;i>=0;i--){if(ratings[i]>ratings[i+1]){candy[i]=max(candy[i],candy[i+1]+1);}}int sum=0;for(int cd:candy){sum+=cd;}return sum;}

vector的初始化

如果一开始写的是vector candy;没给大小,那就不能用candy[0]来赋值,只能push_back来加元素。
或者写成vector candy(ratings.size());

柠檬水找零

这道还挺简单,我是用map来记录面额,收下一张就++;

 		unordered_map<int,int> money;for(int i=0;i<bills.size();i++){money[bills[i]]++;if(bills[i]==10){if(money[5]!=0){money[5]--;}elsereturn false;}else if(bills[i]==20){if(money[10]>=1&&money[5]>=1){money[5]--;money[10]--;}else if(money[10]==0&&money[5]>=3){money[5]-=3;}else return false;}}return true;}

406.根据身高重建队列

先找到最矮的一个人,然后他的second就是他重建后的位置,因为其他人都比他高。

好吧看来理解的还是不够深刻,面对两个维度的问题,一定要先考虑一个在考虑另一个,如果两个维度一起考虑一定会顾此失彼。
这题的思路是先按身高排序,而且要是从大往小排,这样就只用再根据有k个比他高的人在他前面考虑了。
要自己手写排序方式

static bool cmp(vector<int> a,vector<int>b){if(a[0]==b[0]){return a[1]<b[1];]return a[0>b[0];}

sort 排序 return a < b 就是 从小到大; return a > b 就是 从大到小

堆 排序 return a < b 就是大顶堆 ; return a > b 就是小顶堆
在这里插入图片描述

 		sort(people.begin(),people.end(),cmp);vector<vector<int>> queue;for(int i=0;i<people.size();i++){int position=people[i][1];queue.insert(queue.begin()+position,people[i]);}

http://www.ppmy.cn/devtools/100582.html

相关文章

最新版:CISAW信息安全保障人员专业级认证通用要求

信息安全保障人员&#xff08;information security assurance professional&#xff09;从事网络与信息安全相关工作的所有人员&#xff0c;包括组织的管理人员&#xff08;例如&#xff0c;首席信息官、首席安全官、科技管理部门和风险控制管理部门的人员&#xff09;、信息技…

数据结构-时间、空间复杂度-详解

数据结构-时间复杂度-详解 1.前言1.1数据结构与算法1.2如何衡量一个算法的好坏1.3复杂度 2.时间复杂度2.1是什么2.2大O符号只保留最高阶项不带系数常数次为O(1) 2.3示例示例2.1示例2.2示例2.3示例2.4 2.4题目 3.空间复杂度3.1是什么3.2大O符号3.3示例示例1示例2示例3示例4 4.题…

UE4编安卓时Core模块为何只include Android文件夹?

Core模块 Core模块是整个引擎中最核心的模块。几乎UE4中的每个其他模块都导入Core。Engine\Source\Runtime\Core\Private下有很多文件夹&#xff0c;下面罗列一部分&#xff1a; G:\St\EngineSource\Engine\Source\Runtime\Core\Private 的目录 2024/07/18 12:02 <DIR…

关于如何在已有qt项目中添加该项目的单元测试工程

关于如何在已有qt项目中添加该项目的单元测试工程 新建一个子目录工程&#xff0c;把已有项目作为子工程添加进去&#xff0c;然后新建单元测试工程也作为子工程添加进去。单元测试项目要独立于实际项目工程&#xff0c;确保去掉测试项目后&#xff0c;实际项目仍可以正常运行…

网络安全售前入门02——产品了解

目录 1.前言 2.WEB应用防火墙介绍 2.1产品架构功能 2.2应用场景 2.3部署形式 2.4产品价值 2.5选型依据 3.上网行为审计 3.1产品架构功能 3.2应用场景 3.3部署形式 3.4产品价值 3.5选型依据 后续 1.前言 为方便初接触网络安全售前工作的小伙伴了解网安行业情况,我…

macOS M1Pro 安装 chntpw 工具

chntpw介绍 chntpw 工具是用来修改位于 boot.wim 文件第一个索引&#xff08;或分区&#xff09;中的注册表。 在macOS中安装 Windows虚拟机的时候一般会用到 我们采用Homebrew来安装chntpw&#xff0c;需要确保电脑上已经安装好Homebrew。 因为Homebrew无法在核心仓库中找…

【题解】【模拟】—— [CSP-J 2021] 小熊的果篮

【题解】【模拟】—— [CSP-J 2021] 小熊的果篮 [CSP-J 2021] 小熊的果篮题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2输入 #3输出 #3 提示 思路1.数组模拟&#xff08;70分&#xff09;1.1.题意解析1.2.参考代码 思路2.双向链表模拟&#xff08;60分&am…

【超音速 专利 CN202110438812.4】广州超音速自动化科技股份有限公司

申请号CN202110438812.4公开号&#xff08;公开&#xff09;CN113390879A申请日2021.09.14申请人&#xff08;公开&#xff09;广州超音速自动化科技股份有限公司(833753)发明人&#xff08;公开&#xff09;张俊峰&#xff08;总); 罗国和; 陈夏 原文摘要 本发明公开了一种涂…