LeetCode 面试经典150题 134.加油站

题目

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i]升。

你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油 cost[i]升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组 gascost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

思路:从x出发,到y走不下去了。那么对于x到y中的所有节点z,如果从z出发,一定会在y处卡住。应用这个结论,我们在遍历的时候,不需要遍历x到y中的节点了,只需要从走不下去的节点y的下一个节点作为起始遍历即可。

代码

java 复制代码
class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int n = gas.length;
        // 起点i
        int i = 0;
        while (i < n) {
            int sumOfGas = 0, sumOfCost = 0;
            // 记录经过的车站数
            int count = 0;
            while (count < n) {
                int j = (i + count) % n;
                sumOfGas += gas[j];
                sumOfCost += cost[j];
                // 走不下去
                if (sumOfCost > sumOfGas) {
                    break;
                }
                count++;
            }
            if (count == n) 
                return i;
            else 
                i = i + count + 1;
        }
        return -1;
    }
}

性能:时间复杂度O(n) 空间复杂度O(1)

相关推荐
Hilaku16 分钟前
在 HTTP/3 普及的 2026 年,那些基于 Webpack 的性能优化经验,有一半该扔了
前端·javascript·面试
掘金安东尼1 小时前
活动落地页效率翻倍:RollCode 这次更新有点猛
前端·低代码·面试
xlp666hub1 小时前
Leetcode第五题:用C++解决盛最多水的容器问题
linux·c++·leetcode
CoovallyAIHub1 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库2 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构
一语07162 小时前
3分钟搞懂深度学习AI:实操篇:卷积层
人工智能·算法
前端Hardy3 小时前
Bun 1.0 正式发布:JavaScript 运行时的新王者?启动快 5 倍,打包小 90%!
前端·javascript·面试
前端Hardy3 小时前
别再乱写正则了!一行 regex 可能让你的网站瘫痪 10 分钟
前端·javascript·面试
前端Hardy3 小时前
Tauri 1.0 正式发布:用 Rust 写前端,体积比 Electron 小 90%!
面试