加油站学习(自用)

该文章描述了一个编程挑战,涉及在环形路线上遍历加油站的问题。给定两个数组表示每个加油站的汽油供应和消耗,目标是找到一个起点,使得车辆能绕环路行驶一周。算法通过遍历每个加油站,检查是否有足够的汽油完成旅程,并在途中累计油量。当找到一个起点使车辆能成功回到起点时,返回该起点的索引。若无解,则返回-1。
摘要由CSDN通过智能技术生成

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

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

给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int n=gas.length;
        int flag=-1;    //题目要求返回-1
        for(int i=0;i<n;i++){     //挨个数字遍历
            if(gas[i]>=cost[i]){       
            //如果耗油小于供油,说明此站点有希望成为输出站点
                int oil=0;   //每次循环注意重置数据
                int j=0;
               for(;j<n;j++){
                 oil+=gas[(i+j)%n]-cost[(i+j)%n];  //计算出油量
                 if(oil<=0)   //如果没油了就无法走动了,退出循环
                 break;
                }
                 if(oil>=0&&j>=n-1){   
                 //当油量有余并且到达了最后一个站点时可以输出
                 //因为break了,所以如果终点没油j为n-1因此需要把这种情况包括进去
                    flag=i;
                    return flag;
                 }
            }
        }
        return flag;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值