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

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

相关推荐
好评笔记5 分钟前
深度学习笔记——循环神经网络RNN
人工智能·rnn·深度学习·机器学习·计算机视觉·面试·aigc
m0_7482329210 分钟前
Spring Cloud Gateway 整合Spring Security
java·后端·spring
浅念同学1 小时前
JavaWeb-Servlet对象生命周期
java·网络·spring boot·servlet·java-ee·tomcat
Dyan_csdn1 小时前
【Java项目】基于Spring Boot的简历系统
java·数据库·spring boot·spring·tomcat
夏末秋也凉1 小时前
力扣-动态规划-70 爬楼梯
算法·leetcode·动态规划
大萌神Nagato1 小时前
蓝桥杯15届JavaB组6题
算法·蓝桥杯·深度优先
心灵Haven1 小时前
1_安装JDK和Hadoop
java·开发语言·hadoop
web136885658711 小时前
PHP For 循环
android·java·php
loyd32 小时前
【数据分析】5 设计不同业务分析框架
java·网络·数据分析
m0_748245172 小时前
Spring Boot项目开发常见问题及解决方案(上)
java·spring boot·后端