面试经典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;
    }
}

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

相关推荐
程序猿_极客4 小时前
【2025 年最新版】Java JDK 安装与环境配置教程(附图文超详细,Windows+macOS 通用)
java·开发语言·windows·macos·jdk
猫头虎4 小时前
macOS 双开/多开微信WeChat完整教程(支持 4.X 及以上版本)
java·vscode·macos·微信·编辑器·mac·脚本
一个不知名程序员www7 小时前
算法学习入门 --- 哈希表和unordered_map、unordered_set(C++)
c++·算法
二哈喇子!7 小时前
Java开发工具——IDEA(修改全局配置,提升工作效率)
java·编辑器·intellij-idea
强子感冒了7 小时前
Java网络编程学习笔记,从网络编程三要素到TCP/UDP协议
java·网络·学习
二哈喇子!7 小时前
SpringBoot项目右上角选择ProjectNameApplication的配置
java·spring boot
yanyu-yaya8 小时前
前端面试题
前端·面试·前端框架
Sarvartha8 小时前
C++ STL 栈的便捷使用
c++·算法
sin22018 小时前
MyBatis的执行流程
java·开发语言·mybatis
二哈喇子!8 小时前
基于Spring Boot框架的车库停车管理系统的设计与实现
java·spring boot·后端·计算机毕业设计