Day29|134.加油站、135.分发糖果、860.柠檬水找零、406.根据身高重建队列

134.加油站

参考暴力解法中:for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历,要善于使用while!用取余方法环形遍历太妙了!!!

然后是参考贪心算法二,这个思路是不可能想出来的了。

因为题目保证答案唯一,下列是根据测试集做出来的。。。只打败5%,所以也不作数吧

class Solution {

public:

    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {

        vector<int> res;

        for (int i = 0; i < gas.size(); i++)

            res.push_back(gas[i] - cost[i]);

        int sum = 0;

        for (int r : res) sum += r;

        if (sum < 0) return -1;

        for (int i = 0; i < res.size(); i++) {

            if (res[i] < 0) continue;

            if (i < res.size() - 1 && res[i] == 0 && res[i + 1] == 0) continue;

            int s = 0;

            for (int j = i; j < res.size(); j++) {

                s += res[j];

                if (s < 0) break;

            }

            if (s < 0) continue;

            for (int j = 0; j < i; j++) {

                s += res[j];

                if (s < 0) break;

            }

            if (s < 0) continue;

            else return i;

        }

        return -1;

    }

};

135.分发糖果

难。类似的题不要两边一起比较,要两边分别考虑。

860.柠檬水找零

终于碰到一题超级简单的了。

406.根据身高重建队列

想不到。但还是学习了一种思想:两个维度一起考虑的话,先确定一边然后贪心另一边,两边一起考虑,就会顾此失彼。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值