LeetCode第 134 题:加油站(C++)

134. 加油站 - 力扣(LeetCode)
在这里插入图片描述
先寻找起点,然后遍历:

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int n = gas.size();
        for(int i = 0; i < n; ++i){//寻找起始点
            if(gas[i] < cost[i])    continue;
            int val = 0, j = i;
            for(; j < i+n; ++j){
                int idx = j % n;//首尾相连
                val += gas[idx] - cost[idx];
                if(val < 0) break;
            }
            if(val >= 0)    return i;
        }
        return -1;
    }
};

其实还有一个贪心算法的优化:加油站 - 加油站 - 力扣(LeetCode)

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int n = gas.size(), run = 0, rest = 0, start = 0;
        for(int i = 0; i < n; ++i){//寻找起始点
            run += gas[i] - cost[i];
            rest += gas[i] - cost[i];
            if(run < 0){
                start = i + 1;
                run = 0;
            }
        }
        return rest < 0 ? -1 : start;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_32523711/article/details/109041098
今日推荐