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

news/2024/12/29 13:20:40/

Day35

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

860.柠檬水找零

题目链接:860.柠檬水找零

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int wallet[2] = {};for (auto& bill : bills) {if (bill == 5) ++wallet[0];if (bill == 10) {if (wallet[0] == 0) {return false;}++wallet[1];--wallet[0];} if (bill == 20) {if (wallet[0] > 0 && wallet[1] > 0) {//先花10--wallet[0];--wallet[1];} else if (wallet[0] >= 3) {//10不够再花5wallet[0] -= 3;} elsereturn false;}}return true;}
};

406.根据身高重建队列

题目链接:406.根据身高重建队列
每个人的属性为[h, k],排列规则为:优先按照h从大到小排列,当h相等时,按照k从小到大排列。
如此排列后,每个人对应的k属性的数值,即为插入的位置。
因为序列容器vector的插入性能较差,因此选择插入成本低的序列容器list来进行插入操作。
最后通过构造函数来实现容器间的相互转换。

class Solution {
public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(),[](const auto& lhs, const auto& rhs) {if (lhs[0] == rhs[0]) return lhs[1] < rhs[1];return lhs[0] > rhs[0];});//比较函数为优先按照h从大到小排列,当h相等时,按照k从小到大排列list<vector<int>> resL;for (auto& someone : people) {int position = someone[1];auto it = resL.begin();while (position--) ++it;resL.insert(it, someone);}return vector<vector<int>>(resL.begin(), resL.end());}
};

std::next 函数的时间复杂度为 O ( 1 ) O(1) O(1),空间复杂度为 O ( 1 ) O(1) O(1)。在内存中,std::next 函数只需要存储一个指针即可,因此空间复杂度为 O ( 1 ) O(1) O(1);而对于输入参数itcountstd::next 函数只需要执行一次加法操作和一次取地址操作,因此时间复杂度也是 O ( 1 ) O(1) O(1)

插入部分使用next()函数

class Solution {
public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(),[](const auto& lhs, const auto& rhs) {if (lhs[0] == rhs[0]) return lhs[1] < rhs[1];return lhs[0] > rhs[0];});list<vector<int>> resL;for (auto& someone : people) {resL.insert(next(resL.begin(), someone[1]), someone);}return vector<vector<int>>(resL.begin(), resL.end());}
};

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

题目链接:452. 用最少数量的箭引爆气球
思路:处理好相邻的区间的关系,方便统计弓箭的个数。
先排序,按照左边界大小排序后。减少自由度,利于判断。
更新右边界,为了给下一次遍历重叠区间。

class Solution {
public:int findMinArrowShots(vector<vector<int>>& points) {sort(points.begin(), points.end()/*,[](const auto& lhs, const auto& rhs) {return lhs[0] < rhs[0];}*/);int res = 1;for (int i = 1; i < points.size(); ++i) {if (points[i - 1][1] < points[i][0]) {++res;} else {//更新i的右区间,为下一个遍历使用points[i][1] = min(points[i - 1][1], points[i][1]);}}return res;}
};

比较函数可以不写,因为默认就是按照第一个元素由小到大排序的。


http://www.ppmy.cn/news/366701.html

相关文章

黑客技巧之教你制作一个简易的QQ炸弹

今天给大家讲讲简易制作QQ炸弹方面&#xff0c;百分之百大家一看就学会&#xff01; 第一种方法是利用压缩包&#xff0c;这个方法我曾经教过我妹妹用那个方法玩她的同学&#xff0c;首先我们先创建一个文件夹&#xff0c;空文件夹就可以了哦&#xff08;最好是空的&#xff…

现在QQ上的那些“黑客”们

现在的QQ里面的网络交流群也很多&#xff0c;鱼龙混杂&#xff0c;说杂也不杂&#xff0c;说不杂也有点欠缺&#xff0c;分别为&#xff1a;黑帽&#xff08;2%&#xff09;白帽&#xff08;8%&#xff09;程序员&#xff08;10%&#xff09;骗子&#xff08;30%&#xff09;假…

国内第5大黑客高手发布盗号木马昨受审

计算机程序员ISNO”号称国内黑客第5大高手&#xff0c;有着一份外人羡慕的高薪工作。可他居然鬼使神差地答应了朋友深海”的邀请&#xff0c;编写并发布盗号木马&#xff0c;供盗号团伙盗取传奇世界”冒险岛”永恒之塔”等游戏里玩家的账号密码&#xff0c;他则从中收取维护升级…

JUC高级-0608

重新看JUC课程&#xff0c;选择周阳讲的JUC 1.前置知识 lombok插件 Lombok是一个Java库&#xff0c;它通过注解的方式&#xff0c;能够在编译时自动为类生成构造函数、getters、setters、equals、hashCode和toString方法&#xff0c;以及其他常用方法&#xff0c;从而使我们…

C/C++截获腾讯QQ网络聊天系统内容和登录密码,教你做一个黑客!

VC 6.0截获QQ聊天信息及QQ密码&#xff0c;那么如何截取QQ密码和聊天内容、去掉QQ广告栏、添加QQ尾巴呢&#xff1f;首先需要进入QQ进程&#xff0c;然后远程注入Dll&#xff0c;截取QQ登录密码&#xff0c;截取本机QQ账号和昵称&#xff0c;截取聊天内容。 看一下具体实现的几…

it男如何像黑客一样聊天qq

通过irc客户端在linux终端上使用QQ ------------------- ---------------- | Tencent | | Any IRC Client || SmartQQ Server | | wechat、irssi |---v-------------^- -…

黑客入侵网站盗取红包链接判刑几年

一、黑客入侵网站盗取红包链接判刑几年 1、黑客入侵网站盗取红包链接的&#xff0c;构成非法获取计算机信息系统数据、非法控制计算机信息系统罪&#xff0c;依据实际案情确定判刑多少年。具体量刑标准如下&#xff1a; (1)、情节严重的&#xff0c;处三年以下有期徒刑或者拘…

黑客零基础入门:手把手带你实现简单的QQ/邮件攻击,注册表/系统安全防护,学不会请给我只因木马

毋庸置疑&#xff0c;互联网已经深入人们日常生活和工作的各个角落,人们在享受网络带来的便利的同时,多数网民都在面临着不同程度的网络安全的威胁。很多人对黑客攻防感到“畏惧”&#xff0c;觉得其过于复杂&#xff0c;他们基本不懂如何让电脑更安全&#xff0c;或者如何能有…