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

代码随想录算法训练营29期Day35|LeetCode 860,406,452

文档讲解:柠檬水找零  根据身高重建队列  用最小数量的箭引爆气球

860.柠檬水找零

题目链接:https://leetcode.cn/problems/lemonade-change/description/

思路:

        很简单,模拟即可。统计五美元、十美元和十五美元的个数。给五美元就五美元加一。给十美元就十美元加一,五美元减一。给二十就十和五各减一或者五美元减三张。

        每次减完判断是不是够减就行了。

核心代码:

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int m5=0,m10=0;int n=bills.size();for(int i=0;i<n;i++){if(m5<0||m10<0) break;if(bills[i]==5) m5++;else if(bills[i]==10) m10++,m5--;else{if(m10>0) m10--,m5--;else m5-=3;}}return m5>=0&&m10>=0;}
};

406.根据身高重建队列

题目链接:https://leetcode.cn/problems/queue-reconstruction-by-height/description/

思路:

        按照身高h来排序呢,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。

        此时我们可以确定一个维度了,就是身高,前面的节点一定都比本节点高!

        那么只需要按照k为下标重新插入队列就可以了。

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

        局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性

        全局最优:最后都做完插入操作,整个队列满足题目队列属性

核心代码:

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);list<vector<int>> que; // list底层是链表实现,插入效率比vector高的多for (int i = 0; i < people.size(); i++) {int position = people[i][1]; // 插入到下标为position的位置std::list<vector<int>>::iterator it = que.begin();while (position--) { // 寻找在插入位置it++;}que.insert(it, people[i]);}return vector<vector<int>>(que.begin(), que.end());}
};

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

题目链接:https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/

思路:

        为了让气球尽可能的重叠,需要对数组进行排序

        那么按照气球起始位置排序,还是按照气球终止位置排序呢?其实都可以!只不过对应的遍历顺序不同。

        如果按照起始位置排序,那么就从前向后遍历气球数组,靠左尽可能让气球重复。

        从前向后遍历遇到重叠的气球了怎么办?

        如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭

        统计弓箭数目就行了,其实本质还是求重叠的气球个数,重叠的拿一个射就行了。

核心代码:

class Solution {
private:static bool cmp(const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}
public:int findMinArrowShots(vector<vector<int>>& points) {if (points.size() == 0) return 0;sort(points.begin(), points.end(), cmp);int result = 1; // points 不为空至少需要一支箭for (int i = 1; i < points.size(); i++) {if (points[i][0] > points[i - 1][1]) {  // 气球i和气球i-1不挨着,注意这里不是>=result++; // 需要一支箭}else {  // 气球i和气球i-1挨着points[i][1] = min(points[i - 1][1], points[i][1]); // 更新重叠气球最小右边界}}return result;}
};

今日总结

        今日学习时长2h,基本是看的题解,没时间做了学了下思路,这几天忙着别的事,放到周末去总结回顾吧,明天估计也得这样。

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

相关文章:

  • 20240130金融读报1分钟小得01
  • 刷力扣题过程中发现的不熟的函数
  • native2ascii命令详解
  • 什么是Vue Vue入门案例
  • 【C/Python】GtkApplicationWindow
  • SpringBoot自定义全局事务
  • 【FINEBI】finebi中常用图表类型及其适用场景
  • Kaggle竞赛系列_SpaceshipTitanic金牌方案分析_数据分析
  • Tortoise-tts Better speech synthesis through scaling——TTS论文阅读
  • 单元测试工具JEST入门——纯函数的测试
  • Elasticsearch Windows版安装配置
  • 安装 vant-ui 实现底部导航栏 Tabbar
  • GitHub国内打不开(解决办法有效)
  • Unity之第一人称角色控制
  • 23种设计模式-结构型模式
  • python -- 流程控制
  • Centos 7.9 在线安装 VirtualBox 7.0
  • mysql之基本查询
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之DataPanel组件
  • qt5-入门
  • 【重磅发布】已开放!模型师入驻、转格式再升级、3D展示框架全新玩法…
  • Qt 基础之QDataTime
  • 美国将限制中国,使用Azure、AWS等云,训练AI大模型
  • 智能指针|巨巨巨详细
  • 硬件知识(2) 手机的传感器-sensor
  • Kotlin快速入门系列9
  • nginx+nginx-rtmp-module+ffmpeg进行局域网推流rtmp\m3u8
  • PMP备考笔记:模拟考试知识点总结
  • docker程序镜像的安装
  • openssl3.2 - .pod文件的查看方法