代码随想录day29 贪心算法

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());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值