码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Gas Station

时间:2015-09-24 07:02:59      阅读:202      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!