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

*算法训练(leetcode)第二十五天 | 134. 加油站、135. 分发糖果、860. 柠檬水找零、406. 根据身高重建队列

刷题记录

  • 134. 加油站
  • 135. 分发糖果
  • 860. 柠檬水找零
  • 406. 根据身高重建队列

134. 加油站

leetcode题目地址

记录全局剩余油量和当前剩余油量,当前剩余小于0时,其实位置是当前位置的后一个位置。若全局剩余油量为负,则说明整体油量不足以走完全程。

小trick:可以加速c++程序运行。

// c++
cin.tie(nullptr) -> sync_with_stdio(false);

cin.tie(nullptr):避免调用cin时自动刷新cout。
sync_with_stdio(false):关闭 C++ 标准流与 C 标准流同步(例如cin和scanf同步)。

下面另一种写法:

// c++
std::ios::sync_with_stdio(false); // 关闭 C 和 C++ 流的同步
std::cin.tie(nullptr); // 解开 cin 和 cout 的绑定

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// c++
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {cin.tie(nullptr) -> sync_with_stdio(false);int start=0, rest=0, all=0;for(int i=0; i<gas.size(); i++){rest += gas[i]-cost[i];all += gas[i]-cost[i]; if(rest<0) {rest=0;start = i+1;}}if(all<0) return -1;return start;}
};

135. 分发糖果

leetcode题目地址

先初始化糖果列表均为1,因为每个人至少发一个。先从前向后检查,若后一个大于前一个,则后一个糖果等于前一个糖果+1。
再从后向前检查,若后一个小于前一个,将前一个糖果赋值为max(当前糖果,后一个糖果+1)。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

// c++
class Solution {
public:int candy(vector<int>& ratings) {cin.tie(nullptr) -> sync_with_stdio(false);int all=0;vector<int> candies(ratings.size(), 1);for(int i=1; i<ratings.size(); i++){if(ratings[i-1]<ratings[i]){candies[i] = candies[i-1]+1;}}for(int i=ratings.size()-2; i>=0; i--){if(ratings[i+1]<ratings[i]){candies[i] = max(candies[i+1]+1, candies[i]);}}for(int i=0; i<candies.size(); i++){all += candies[i];}return all;}
};

860. 柠檬水找零

leetcode题目地址

记录5元和10元的个数,当出现找不开就返回false。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

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

406. 根据身高重建队列

leetcode题目地址

思路来源

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// c++
class Solution {
public:static bool cmp(const vector<int>& a, const 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>> result;for(int i=0; i<people.size(); i++){int pos = people[i][1];result.insert(result.begin()+pos, people[i]);}return result;}
};
http://www.lryc.cn/news/394717.html

相关文章:

  • 乐鑫ESPC3 ESP8685 WiFi蓝牙模块透传程序设置教程,抛开繁琐AT指令,简单Web页面配置,即可实现透传
  • 怎么样才能为公司申请OV证书?
  • Python的`queue`模块
  • 牛客周赛 Round 50
  • 后端之路——登录校验
  • 无线网卡怎么连接台式电脑?让上网更便捷!
  • 【45 Pandas+Pyecharts | 去哪儿海南旅游攻略数据分析可视化】
  • Vue3项目给ElementPlus设置中文的两个方案
  • C#开发单实例应用程序并响应后续进程启动参数
  • STM32智能机器人导航系统教程
  • Android 15 适配之16K Page Size :为什么它会是最坑的一个适配点
  • 下载linux的吐槽
  • 【HTML入门】第四课 - 换行、分割横线和html的注释
  • 基于Hadoop平台的电信客服数据的处理与分析④项目实现:任务15:数据生产
  • Kotlin中的数据类型
  • 提高交易决策质量,Anzo Capital昂首资本只需两个交易策略
  • Ubuntu TensorRT安装
  • spring mvc学习
  • 第4集《修习止观坐禅法要》
  • IPython 日志的开关:精通 %logoff 命令的实用指南
  • Redis 分布式集群方案 Cluster
  • Redis的两种持久化方案
  • Spring中常见知识点及使用
  • Excel 宏录制与VBA编程 ——VBA编程技巧篇二 (合并内容相同连续单元格、取消合并单元格并在每个单元格中保留内容)
  • 理解和应用工业设备字典文件:一篇详细指南
  • Python酷库之旅-第三方库Pandas(010)
  • 海康威视监控web实时预览解决方案
  • ubuntu运行qq音乐闪退
  • 人脸检测(Python)
  • Offer150-23:链表中环的入口节点