方法:贪心
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int f = 0, t = 0;
for (int& v : bills) {
if (v == 5) ++f;
if (v == 10) {
if (f <= 0) return false;
--f;
++t;
}
if (v == 20) {
if (f > 0 && t > 0) {
--f;
--t;
} else if (f >= 3) f -= 3;
else return false;
}
}
return true;
}
};
$时间复杂度O(n),空间复杂度O(1)
方法:贪心
class Solution {
public:
vector<vector<int>> reconstructQueue(vector<vector<int>>& p) {
sort(p.begin(), p.end(), [&](const vector<int>& a, const vector<int>& b) {
if (a[0] == b[0]) return a[1] < b[1];
else return a[0] > b[0];
});
list<vector<int>> res;
for (int i = 0; i < p.size(); ++i) {
int pos = p[i][1];
std::list<vector<int>>::iterator it = res.begin();
while (pos--) ++it;
res.insert(it, p[i]);
}
return vector<vector<int>> (res.begin(), res.end());
}
};
使用list可以避免动态数组vector拷贝时候浪费的时间
$时间复杂度O(),空间复杂度O()
方法:贪心
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) {
int res = 1;
sort(points.begin(), points.end(), cmp);
for (int i = 1; i < points.size(); ++i) {
if (points[i][0] > points[i-1][1]) ++res;
else points[i][1] = min(points[i][1], points[i-1][1]);
}
return res;
}
};
$时间复杂度O(n),空间复杂度O()