面试经典150题——加油站

面试经典150题 day14

题目来源

力扣每日一题;题序:134

我的题解

方法一 找最低点

参考 labuladong

找到最低点的下一个站 经过i之后变成最低点,则从i+1站开始
时间复杂度 :O(n)
空间复杂度:O(1)

java 复制代码
class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int n=gas.length;
        int sum=0;
        int start=0;
        int minSum=0;
        for(int i=0;i<n;i++){
            sum+=gas[i]-cost[i];
            if(sum<minSum){
            // 经过第 i 个站点后,使 sum 到达新低
            // 所以站点 i + 1 就是最低点(起点)
                start=i+1;
                minSum=sum;
            }
        }
        if(sum<0){
        // 总油量小于总的消耗,无解
            return -1;
        }
        return start==n?0:start;
    }
}
方法二 贪心

时间复杂度:O(n)

空间复杂度:O(1)

java 复制代码
class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int n=gas.length;
        int sum=0;
        int start=0;
        int myGas=0;
        for(int i=0;i<n;i++){
            sum+=gas[i]-cost[i];
            myGas+=gas[i]-cost[i];
            // 如果选择站点 start 作为起点「恰好」无法走到站点 i,那么 start 和 i 中间的任意站点 k 都不可能作为起点。只能从i+1开始重新寻找可以作为起点的位置
            if(myGas<0){
                start=i+1;
                myGas=0;
            }
        }
        if(sum<0){
            return -1;
        }
        return start==n?0:start;
    }
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
DARLING Zero two♡7 小时前
【优选算法】LinkedList-Concatenate:链表的算法之契
数据结构·c++·算法·链表
半旧夜夏7 小时前
【Gateway】服务调用和网关配置攻略
java·spring boot·spring cloud·gateway
Moonbit7 小时前
MoonBit Pearls Vol.14:哈希表避坑指南
后端·算法·编程语言
yue0087 小时前
C# 求取整数的阶乘
java·开发语言·c#
可观测性用观测云7 小时前
JAVA Heap Dump 采集最佳实践
java
一 乐7 小时前
个人博客|博客app|基于Springboot+微信小程序的个人博客app系统设计与实现(源码+数据库+文档)
java·前端·数据库·spring boot·后端·小程序·论文
曹绍华7 小时前
android 线程loop
android·java·开发语言
杰克尼7 小时前
120. 三角形最小路径和
算法
我命由我123457 小时前
Android 开发 - Android JNI 开发关键要点
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
晴殇i7 小时前
前端代码规范体系建设与团队落地实践
前端·javascript·面试