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

代码随想录训练营第二十九天 134加油站 135分发糖果 860柠檬水找零 406根据身高重建队列

第一题:

原题链接:134. 加油站 - 力扣(LeetCode)

思路:

需要三个变量,一个变量start记录结果也就是出发的第一个加油站,一个变量curSum来记录此时加油耗油后剩余的油量,如果发现curSum小于0的话就直接从当前加油站的下一个加油站作为第一个加油站重新计算;一个变量totalSum来记录行驶完一圈后剩余的油量,如果小于0说明行驶不了一圈返回-1;

代码如下:

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

第二题:

原题链接:135. 分发糖果 - 力扣(LeetCode)

思路:

先从左向右遍历记录右孩子比左孩子多的情况,然后再从右向左遍历记录左孩子比右孩子高分的情况。从右向左遍历的时候要基于从左向右遍历后的结果进行计算。

两者比较完取最大值。

代码如下:

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

第三题:

原题链接:860. 柠檬水找零 - 力扣(LeetCode)

思路:

收到五块直接收下,

收到十块需要看有没有五块,没有五块直接返回false,如果有五块减一。

收到二十块,如果没有五块直接返回false,如果没有十块且五块少于3张,也返回false。找零的时候先找十块的,没有十块的再找五块。

代码如下:

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

第四题:

原题链接:406. 根据身高重建队列 - 力扣(LeetCode)

先根据身高进行从大到小的排序,如果身高相同就根据k进行从小到大排序。

然后遍历数组,根据k的值插入到结果数组中。

按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。

代码如下:

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);vector<vector<int>> res;for(int i = 0; i < people.size(); i++){int position = people[i][1];res.insert(res.begin() + position, people[i]);}return res;}
};

http://www.lryc.cn/news/392384.html

相关文章:

  • 智能生产管理系统设计
  • 满足GMSL静电防护要求的方案
  • 【Odoo开源ERP】别把ERP与进销存软件混为一谈
  • 八、浏览器同源策略
  • 重载赋值运算符
  • 数字信号处理及MATLAB仿真(2)——离散系统
  • 大模型思维链(Chain-of-Thought)技术原理
  • gda动态调试-cnblog
  • Double 4 VR仿真情景实训教学系统在法律专业课堂上的应用
  • k8s-第一节-minikube
  • html+js+css在线倒计时
  • 构建LangChain应用程序的示例代码:55、如何实现多代理模拟,其中特权代理决定谁发言。这遵循与多代理分散发言者选择相反的选择方案
  • 船舶雷达与导航系统选择7/8防水插座的原因分析
  • 墨烯的C语言技术栈-C语言基础-006
  • 常用SHELL命令
  • Python脚本:将Word文档转换为Excel文件
  • 【单链表】03 设L为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值。
  • 鸿蒙开发设备管理:【@ohos.vibrator (振动)】
  • 【信息学奥赛】CSP-J/S初赛07 排序算法及其他算法在初赛中的考察
  • 第N7周:seq2seq翻译实战-pytorch复现-小白版
  • java集合(1)
  • 分布式数据库HBase:从零开始了解列式存储
  • 接口测试流程及测试点!
  • 已经安装deveco-studio-4.1.3.500的基础上安装deveco-studio-3.1.0.501
  • 【C++】 解决 C++ 语言报错:Use of Uninitialized Variable
  • 2024年7月6日 十二生肖 今日运势
  • ubuntu丢失网络/网卡的一种原因解决方案
  • 第6篇 共识机制深度解析:PoW、PoS、DPoS和PBFT
  • Windows环境使用SpringBoot整合Minio平替OSS
  • LeetCode 196, 73, 105