首页 > 其他 > 详细

LeetCode-134 Gas Station

时间:2015-02-24 00:46:28      阅读:303      评论:0      收藏:0      [点我收藏+]

There are N gas stations along a circular route, where the amount of gas at station i is gas[i].

You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its next station (i+1). You begin the journey with an empty tank at one of the gas stations.

Return the starting gas station‘s index if you can travel around the circuit once, otherwise return -1.

Note:
The solution is guaranteed to be unique.

思路:

1. 循环遍历每个起点,计算是否满足要求。时间复杂度为O(n^2);

2. 假设从i->j-1,剩余的汽油量都够行驶,而从j-1行驶到j时,汽油不够了,即从i开始无法行驶到j。

  此时,按照第1种思路,是从i+1作为新的起点开始遍历。

  但是在第i个加油站一定有gas[i] >= cost[i],则从i+1到j同样不能完成;

  并且gas[i]+gas[i+1]-cost[i]-cost[i+1] >= 0,则从i+2到j也不能完成;

  以此类推,i到j之间的所有点都不能完成要求,则直接从j+1作为新的节点开始遍历。

  当i到n满足条件时,需要判断i到j的剩余油量是否够0到i-1的路程使用。

代码如下:

public int canCompleteCircuit(int[] gas, int[] cost) {
        int left = 0;//汽油剩余量
        int pass = 0;//从0->i-1的汽油不足量
        int start = 0;
        for(int i=0; i<gas.length; i++) {
            left = gas[i] - cost[i] + left;
            if(left < 0) {
                pass = left + pass;
                start = i + 1;
                left = 0;
            }
        }
        if(pass + left >= 0)
            return start;
        else 
            return -1;
    }

 

LeetCode-134 Gas Station

原文:http://www.cnblogs.com/linxiong/p/4298408.html

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