LeetCode 134. 加油站

题目链接

134. 加油站

题目分析

这个题初看没啥思路,但是细看的话可以用贪心来解决问题。
具体的思路写在代码中了

代码实现

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int sum = 0;
        //计算油量与消耗量之差的总和
        for(int i = 0; i < gas.length; i++){
            sum += gas[i] - cost[i];
        }
        //如果总和小于0,代表着这一趟无论你怎么走都是走不完的,直接返回-1
        if(sum < 0){
            return -1;
        }
        int cur = 0;
        int start = 0;
        //cur代表当前油量,我们从0开始走,当我们走到一个站之后,发现当前油量已经小于0了,说明从前一个位置走,到当前位置是一定会失败的。
        //至于这里为什么start是i + 1呢,因为我们从[a, i - 1]都是可以成功走完的,只有第i位是失败的,说明第i位的耗油量远远大于0,所以从这里开始不现实,所以选择从i+1位走
        for(int i = 0; i < gas.length; i++){
            cur += gas[i] - cost[i];
            //如果当前油量小于0,就直接更新起始位置
            if(cur < 0){
                start = i + 1;
                cur = 0;
            }
        }
        return start;
    }
}
posted @ 2020-09-12 15:39  ZJPang  阅读(97)  评论(0编辑  收藏  举报