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)

相关推荐
先吃饱再说9 分钟前
LeetCode 226. 翻转二叉树
算法
剑锋所指,所向披靡!22 分钟前
数据结构之关键路径
数据结构·算法
阿宇的技术日志26 分钟前
漏桶、令牌桶、滑动窗口 三限流算法理解
算法·滑动窗口·漏桶·令牌桶
来一碗刘肉面32 分钟前
队列的链式实现
数据结构·c++·算法·链表
KaMeidebaby1 小时前
卡梅德生物技术快报|原核膜蛋白表达优化实操手册,膜蛋白的纯化梯度洗脱完整流程
前端·网络·数据库·人工智能·算法
naturerun1 小时前
逐步插入回路法构造欧拉回路的算法
c++·算法
qizayaoshuap1 小时前
# [特殊字符] 骰子模拟器 — 鸿蒙ArkTS随机算法与动画系统设计
算法·华为·harmonyos
山顶夕景1 小时前
【DWT】计算两不等序列相似度:DWT
算法·动态规划·检索·模式识别·相似度
奶人五毛拉人一块2 小时前
二分算法以及习题讲解
数据结构·算法·二分
程序员清风2 小时前
公司要裁员之前,都会有哪些信号?
java·后端·面试