LeetCode134—加油站(java版)

题目描述:

标签:贪心算法

在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。

  代码:

思路分析:

1、如果gas的总和小于cost总和,那么无论从哪里出发,都不能跑一圈,即curSum<0 

2、记录curSum计算过程中的最小值,如果min>=0则说明可以从I=0出发(说明累加值没有出现负数)

3、否则需要从非0节点出发,从后向前,看那个加油站能把这个负数填平,找到这个结点

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
       int curSum = 0;
       int min = Integer.MAX_VALUE;
       for(int i = 0;i < gas.length;i++){
           int res = gas[i] - cost[i];
           curSum += res;
           if(curSum < min){
               min = curSum;
           }
       }
       if(curSum < 0) return -1;
       if(min >= 0) return 0;
       
       for(int i = gas.length - 1;i > 0;i--){
           int res = gas[i] - cost[i];
           min += res;
           if(min >= 0){
               return i;
           }
       }
       return -1;
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值