day03(10.30)——leetcode面试经典150
134. 加油站
134. 加油站
题目:


题解:
class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {//进行一个一个判断是否能作为出发点for(int i=0; i<gas.length; i++) {int gasSum = 0;int costSum = 0;int cnt = 0;while(cnt < gas.length) {//计算当前位置的索引int index = (i+cnt) % gas.length;//进行判断 gasSum += gas[index];costSum += cost[index];//不能走到该位置,直接放弃这个起点if(gasSum < costSum) {break;}//能走到该位置,继续下一个位置else {cnt++;}}//如果这个点能够到达gas.length,说明该起点就是唯一解if(cnt == gas.length) {return i;}// 此时的i当起点是不行的,并且在i+cnt之前的点都是不行的,// 因为一直都不会有多余的汽油// 所以要判断的起点是i+cnt+1;// 由于这里用的是for循环,每次会自动+1// 所以直接让i = i+cntelse {i += cnt;}}return -1;                                                    }
}