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

代码随想录算法训练营第35天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

代码随想录算法训练营第35天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

  • 860.柠檬水找零
  • 406. 根据身高重建队列
  • 452. 用最少数量的箭引爆气球

860.柠檬水找零

题目链接:860.柠檬水找零,难度:简单
【实现代码】

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int change[2] = {0};for (int i = 0; i < bills.size(); i++) {if (bills[i] == 5) {change[0]++;} else if (bills[i] == 10) {change[0]--;change[1]++;} else if (bills[i] == 20) {change[0]--;if (change[1] == 0) {change[0] -= 2;} else {change[1]--;}                }// cout << change[0] << "  " << change[1] << endl;if (change[0] < 0 || change[1] < 0) {return false;}}return true;}
};

【解题思路】

需要注意的是,5块和10块是分开计数的,而且当十块不够的时候可以使用5块的。

406. 根据身高重建队列

题目链接:406. 根据身高重建队列,难度:中等
【实现代码】

class Solution {
public:static bool cmp(const vector<int>& people1, const vector<int>& people2) {if (people1[0] == people2[0]) {return people1[1] < people2[1];} else {return people1[0] > people2[0];}}vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), cmp);// for (int i = 0; i < people.size(); i++) {//     cout << people[i][0] << " " << people[i][1] << endl;// }list<vector<int>> queue;for (int i = 0; i < people.size(); i++) {int position = people[i][1];list<vector<int>>::iterator it = queue.begin();while (position--) {it++;}queue.insert(it, people[i]);}return vector<vector<int>>(queue.begin(), queue.end());}
};

【解题思路】

首先是对原数组进行排列,按照身高降序和k值升序的顺序排列。
接着是插入到新的数组里,应该按照对应k值进行操作。
因为vector的底层结构是数组,插入和删除操作都是O(n^2),所以使用链表进行存储新的队列。

452. 用最少数量的箭引爆气球

题目链接:452. 用最少数量的箭引爆气球,难度:中等
【实现代码】

class Solution {
public:static bool cmp(vector<int>& point1, vector<int>& point2) {return point1[0] < point2[0];}int findMinArrowShots(vector<vector<int>>& points) {sort(points.begin(), points.end(), cmp);int result = 1;for (int i = 1; i < points.size(); i++) {            if (points[i][0] > points[i - 1][1]) {result++;} else {points[i][1] = min(points[i][1], points[i - 1][1]);}}return result;}
};

【解题思路】

这一题主要是找重叠的坐标范围,首先也是对坐标进行排序,按照第一个x进行升序排列。
之后找重叠的范围,每次要找到相邻两个坐标的最大重叠坐标x;如果下一个的第一个x大于前一个坐标的第二个x,则需要重新射一箭。

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

相关文章:

  • C++整人代码,十分朴实但威力无穷,让你对cout怀疑人生,整死你的同学
  • 【Spring Cloud Alibaba】12.定时任务(xxl-job)
  • GDB core dump分析
  • Leetcode.111 二叉树的最小深度
  • 【RP-RV1126】SDK编译常用记录
  • 【操作系统复习】第5章 存储器管理
  • Python人工智能在气象中的实践技术应用
  • libcurl库的安装及使用说明
  • 【JAVAEE】手把手教学多线程,包教包会~
  • 基于ChatGPT API的PC端软件开发过程遇到的问题的分析
  • 啥是插入排序 ?
  • 华为OD机试题 Q2 押题【贪心的商人 or 最大利润】用 C++ 编码,速通
  • spring框架注解
  • 前端如何处理文本溢出
  • vue elementUI select下拉框设置默认值(赋值)失败
  • TensorRT创建Engine并推理engine
  • 生成式人工智能所面临的问题有哪些?
  • 代码随想录算法训练营第四十三天 | 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
  • PostCSS 让js可以处理css
  • 【C语言进阶:自定义类型详解】位段
  • 十三、RNN循环神经网络实战
  • 五子棋透明棋盘界面设计(C语言)
  • Redis第六讲 Redis之List底层数据结构实现
  • 电子学会2023年3月青少年软件编程python等级考试试卷(四级)真题,含答案解析
  • 【MATLAB】一篇文章带你了解beatxbx工具箱使用
  • 【LinuxC Sqlite数据库小项目】基于Sqlite的打卡系统------适合初学者练手的小项目
  • 在掌握C#基础上再学习C语言
  • HTML5 <body> 标签
  • (链表)反转链表
  • deb文件如何安装到iphone方法分享