Leetcode DAY 35:柠檬水找零and根据身高重建队列 and用最少数量的箭引爆气球
- 860.柠檬水找零
-
class Solution { public:bool lemonadeChange(vector<int>& bills) {int five = 0;int ten = 0;for(int i = 0; i < bills.size(); i++) {if(bills[i] == 5) {five++;} else if(bills[i] == 10) {ten++;five--;if(five < 0){return false;}} else {if(ten > 0 && five > 0) {ten--;five--;} else if(ten == 0 && five >= 3) {five -= 3;} else {return false;}}}return true;} };
- 406.根据身高重建队列
!cmp函数的一个特性就是,a是前面的元素, b是后面的元素,如果return 0, 那么sort就会将他们互换位置, return 1就会保持原来位置不变。
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>> que;for(int i = 0; i < people.size(); i++) {int pos = people[i][1];que.insert(que.begin() + pos, people[i]);}return que;}
};
- 452. 用最少数量的箭引爆气球
!最开始 没考虑重叠气球的 重叠右边界是否可以射到下一个气球
-
class Solution { public:int findMinArrowShots(vector<vector<int>>& points) {sort(points.begin(), points.end());int nums = 1;for(int i = 0; i < points.size() - 1; i++) {if(points[i][1] < points[i + 1][0]) {nums++;} else {points[i + 1][1] = min(points[i + 1][1], points[i][1]);}// 更新重叠气球的重叠右边界}return nums;} };