题目链接: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;
}
}
看了下大神的高效率解,还没来得及学习一番!!!