134. 加油站
cpp
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int cursum = 0;
int totalsum = 0;
int start = 0;
for (int i = 0; i < gas.size(); i++) {
cursum += gas[i] - cost[i];
totalsum += gas[i] - cost[i];
if (cursum < 0) {
start = i + 1;
cursum = 0;
}
}
if (totalsum < 0)
return -1;
return start;
}
};
135. 分发糖果
cpp
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int> candys(ratings.size(), 1);
for (int i = 1; i < ratings.size(); i++) {
if (ratings[i - 1] < ratings[i]) {
candys[i] = candys[i - 1] + 1;
}
}
for (int i = ratings.size() - 1; i > 0; i--) {
if (ratings[i] < ratings[i - 1]) {
candys[i - 1] = max(candys[i] + 1, candys[i - 1]);
}
}
int sum = 0;
for (auto a : candys) {
sum += a;
}
return sum;
}
};
860. 柠檬水找零
cpp
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int bill5 = 0;
int bill10 = 0;
for (auto a : bills) {
if (a == 5) {
bill5++;
} else if (a == 10) {
if (bill5 <= 0)
return false;
bill10++;
bill5--;
} else {
if (bill10 > 0 && bill5 > 0) {
bill10--;
bill5--;
} else if (bill5 >= 3) {
bill5 -= 3;
} else {
return false;
}
}
}
return true;
}
};
406. 根据身高重建队列
cpp
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;
}
};
其实这道题主要是思路,大部分人无法想到按身高降序排序后,第二个参数便是在当前队列里要插入的位置。