题解 | #大胃王牛牛# 贪心

大胃王牛牛

https://www.nowcoder.com/practice/4e55777e218b4850928d054a8cddaf50

知识点

贪心

思路

首先,grass的总和必须要比cost大,否则是不存在解的,一定走不完一圈。然后我们考虑从前往后模拟这一个过程,如果遇到累积的前缀和为负数,可以认为对结果没有贡献,可以舍弃,从当前的位置开始往后面走。

时间复杂度为O(n)

AC Code(C++)

#include <numeric>
#define all(x) (x).begin(), (x).end()
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param grass int整型vector 
     * @param cost int整型vector 
     * @return int整型
     */
    int can_complete_circuit(vector<int>& grass, vector<int>& cost) {
        int n = grass.size();
        int s1 = accumulate(all(grass), 0);
        int s2 = accumulate(all(cost), 0);
        if (s1 < s2) return -1;

        // 模拟跑一遍
        int id = 0;
        int cur = 0;
        for (int i = 0; i < n; i ++) {
            cur += grass[i] - cost[i];
            if (cur < 0) {
                id = i + 1;
                cur = 0;
            }
        }
        return id + 1;
    }
};

全部评论

相关推荐

05-19 15:21
已编辑
华南农业大学 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
05-29 20:34
门头沟学院 C++
KarlAllen:得做好直接春招的准备。学历差的话,一是面试要求会比学历好的严格不少,二是就算面试通过了也会被排序。总之暑期和秋招对于学历差的就是及其不友好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务