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)

相关推荐
笨鸟先飞的橘猫2 分钟前
基于Skynet的分布式游戏场景题:大型MMO的跨服战场系统设计
分布式·学习·游戏·面试·lua
不知名的忻3 分钟前
关键路径(Java)
java·数据结构·算法·关键路径
大大杰哥4 分钟前
2025ccpc南昌补题笔记(前六题)
c++·笔记·算法
手写码匠6 分钟前
手写 AI 智能路由系统:从零构建多模型调度与负载均衡
人工智能·深度学习·算法·aigc
sheeta19986 分钟前
LeetCode 每日一题笔记 日期:2026.05.14 题目:2784. 检查数组是否是好的
笔记·算法·leetcode
故事还在继续吗7 分钟前
DPDK 教程(三):多队列 + RSS + 多 worker 的最小转发 / Echo
算法·哈希算法·dpdk
豆苗学前端8 分钟前
【前端内功】同为数据驱动,为什么只有 React 的"心智负担"这么重?(附实战优化指南)
前端·vue.js·面试
AI科技星9 分钟前
全域数学·体积与表面积通项定理【乖乖数学】
人工智能·算法·数学建模·数据挖掘·机器人
Yingjun Mo14 分钟前
1. 在线学习引言
学习·算法
李日灐17 分钟前
< 12 > Linux进程:进程虚拟地址空间机制 —— 内存管理的美学
linux·运维·算法