leetcode 134. 加油站

题目链接
思路:一次遍历
分析:那么就从每个站点出发试试
但是,开始的站点,肯定要满足能加的油肯定要大于等于去下一站要耗费的油量。
即gas[i]>=cost[i]
并且因为答案唯一,所以能加的油量肯定不是0
即gas[i]!=0
假设从x点出发,最远到了y,假设没有经过所有站点。
那么下一次开始的点,不是x后的站点,而应该是y后面的站点。
因为x和y中间的站点,已经走过了,已经判断了不行。
代码:

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int len = gas.length;
        int max =0;
        int start =0;

        for(int i=0;i<len;i++){
            //起点肯定是  能加的油多余花费的汽油  并且因为答案唯一,所以起点肯定不是加油0
            if(gas[i]>=cost[i] && gas[i]!=0){
                //start记录起点
                start = i;
                //记录此时的油量,一开始肯定是0
                int t =0;

                //记录经过的站点
                int count=0;

                //判断跑到下一站的油够不够     并且  判断是不是跑过所有站点了
                while(t+gas[start%len]-cost[start%len]>=0 && count<=len){
                    t = t+gas[start%len]-cost[start%len];
                    start++;
                    count++;
                }
                //如果跑过了所有站点,那么就找到答案了
                if(count>=len){
                    return i;
                }else{
                    //否则就从下一个到不了的油站开始,因为从前面的油站出发,已经试过了,不能经过所有站点,这个要仔细想想
                    i = i+count;
                }
            }
        }
        return -1;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值