134. 加油站
总油量大于总消耗量说明一定可以跑完一圈,这个好理解
那关键在于为什么遍历完数组,剩余量大于等于0就找到起点位置?
首先,既然一定可以跑一圈说明一定存在加油站可以作为起点,考虑以下极端情况
如果前面四个加油站作为起点都不满足条件,那么起点只能是最后一个加油站,
逐个排除不符合条件的位置,下一个就是起点
还要注意加油站的油量是递增的
优化代码:
135. 分发糖果
每一个孩子都要和他的左右相邻孩子比较,比分数低的多,比分数高的少
正向遍历+反向遍历
860.柠檬水找零
记录已有的各种钞票的张数,分情况找零
406.根据身高重建队列
按照身高从高到低依次排列且相同身高k值大的靠后排
然后依次将身高较低的人排到队列中与k相等的下标处
自己推两遍就明白了
优化:在大数据规模时提高插入效率
#include <list>
vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
sort(people.begin(), people.end(), cmp);
list<vector<int>> que; // 改用list
for (const auto& p : people) {
auto it = que.begin();
advance(it, p[1]); // 移动到插入位置
que.insert(it, p);
}
return vector<vector<int>>(que.begin(), que.end());
}