标签:
原题链接在这里:https://leetcode.com/problems/gas-station/
参见这篇帖子:http://pisxw.com/algorithm/Gas-Station.html
sumCur是走到当前油站的剩余油量,totalCir是走完一整圈的剩余油量。若是从起始站走到i站,当前剩余油量sumCur < 0说明走不到i站,同时也不能走到起始站到i站中间的任意一站。
假设k站是起始站到i站中间的一站,因为是走到i才停的,走到k并没有停,所以走到k时sumCur其实sumCur还是正数,但走到i时sumCur变成了负数。
现在假设从k站其实那么sumCur是0,走到i的话肯定是一个负数,因为正数的sumCur走到i都被减成了负数,何况是0的sumCur呢。
totalCir 其实是用来判定能不能走完一圈,若是totalCir是正数,那说明从i点能走完一圈,从i开始的一圈和从0开始的一圈用油不变,油量不变,所以可以直接使用。直接返回index+1.
Note: 注意一种情况就是从0站开始的SumCir一直是非负的话, 返回index+1, 此时和index的初始化有直接关系。index初始化为-1,index+1正好是0.
AC Java:
1 public class Solution { 2 public int canCompleteCircuit(int[] gas, int[] cost) { 3 if(gas == null || cost == null || gas.length == 0 || cost.length == 0 || gas.length != cost.length){ 4 return -1; 5 } 6 int sumCur = 0; //到达当前油站的剩余油量 7 int totalCir = 0; //走完一整圈的剩余油量 8 int index = -1; 9 for(int i = 0; i<gas.length; i++){ 10 int diff = gas[i] - cost[i]; 11 sumCur += diff; 12 totalCir += diff; 13 if(sumCur < 0){ //走到i站是负数,说明走不到i站,也不能选取起始站到i站中的任何一战 14 sumCur = 0; 15 index = i; //更新index是和 index的初始条件有关系的 16 } 17 } 18 return totalCir >= 0 ? index+1:-1; 19 } 20 }
标签:
原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4834072.html