LeetCode 134

https://leetcode.cn/problems/gas-station/description/

难度:中等

高频面试题汇总:https://www.yuweihung.com/posts/2025/lc-hot/

如果 gas 之和小于 cost 之和,那么答案不存在。从示例 1 的计算过程可以发现,我们可以先计算从 0 号加油站出发的油量变化,然后从中找到油量最低时所处的加油站(3 号加油站),即为答案。

时间复杂度:O(n),其中 n 是 gas 的长度。

空间复杂度:O(1)。

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int ans = 0, min_s = 0, s = 0; // s 表示油量,min_s 表示最小油量
        for (int i = 0; i < gas.size(); i++) {
            s += gas[i] - cost[i]; // 在 i 处加油,然后从 i 到 i+1
            if (s < min_s) {
                min_s = s; // 更新最小油量
                ans = i + 1; // 注意 s 减去 cost[i] 之后,汽车在 i+1 而不是 i
            }
        }
        // 循环结束后,s 即为 gas 之和减去 cost 之和
        return s < 0 ? -1 : ans;
    }
};