1. 程式人生 > >LeetCode--134. Gas Station

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;
    }
}

看了下大神的高效率解,還沒來得及學習一番!!!