- 860.柠檬水找零
-
class Solution { public: bool lemonadeChange(vector<int>& bills) { int five = 0, ten = 0, twenty = 0; for (int bill : bills) { // 情况一 if (bill == 5) five++; // 情况二 if (bill == 10) { if (five <= 0) return false; ten++; five--; } // 情况三 if (bill == 20) { // 优先消耗10美元,因为5美元的找零用处更大,能多留着就多留着 if (five > 0 && ten > 0) { five--; ten--; twenty++; // 其实这行代码可以删了,因为记录20已经没有意义了,不会用20来找零 } else if (five >= 3) { five -= 3; twenty++; // 同理,这行代码也可以删了 } else return false; } } return true; } };
-
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 position = people[i][1]; que.insert(que.begin() + position, people[i]); } return que; } };
- 452. 用最少数量的箭引爆气球
-
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; } };