LeetCode--134. Gas Station

题目链接:https://leetcode.com/problems/gas-station/

这个题目题意很绕,但是十分简单,最朴素的思路就是暴力检查一遍,不过有个小技巧——整除余数的性质:就是检查到数组末端的数组后,索引i越界,计算数组长度的余数就能回到起始端,这里还要注意索引0前的一个元素是索引等于length-1的元素。图示如下:

                                                     

代码如下:

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        
        for(int start=0;start<gas.length;start++)
        {
            if(isAccessible(start,gas,cost))
                return start;
        }
        return -1;
    }
    
    public static boolean isAccessible(int start,int[] gas,int[] cost)
    {
        int tank=0;
        
        int i=start+1;
        int pre=0;
        int new_index=0;
        for(;(new_index=i%gas.length)!=start;i++)
        {
            pre=new_index-1;
            if(new_index==0)
                pre=gas.length-1;
            tank+=gas[pre];
            tank-=cost[pre];
            if(tank<0)
                return false;
        }
        int p=(i-1)%gas.length;
        tank+=gas[p];
        tank-=cost[p];
        if(tank>=0)
            return true;
        else
            return false;
    }
}

看了下大神的高效率解,还没来得及学习一番!!!

猜你喜欢

转载自blog.csdn.net/To_be_to_thought/article/details/85204162