首页 > 其他 > 详细

LeetCode Gas Station

时间:2015-09-24 07:02:21      阅读:221      评论:0      收藏:0      [点我收藏+]

原题链接在这里: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 }

 

LeetCode Gas Station

原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4834072.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!