[leetcode]Gas Station

Gas Station

 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 public class Solution {
 2     public int canCompleteCircuit(int[] gas, int[] cost) {
 3         int[] stations = new int[gas.length];
 4         int count = gas.length,index = 0;
 5         for(int i = 0; i < count;i++){
 6             if(gas[i] >= cost[i]){
 7                 stations[index++] = i;
 8             }
 9         }
10         breakable:
11         for(int i = 0; i < index; i++){
12             int gasCount = 0;
13             int costCount = 0;
14             for(int j = stations[i]; j < count + stations[i]; j++){
15                 gasCount += gas[j % count];
16                 costCount += cost[j % count];
17                 if(costCount > gasCount) continue breakable;
18             }
19             return stations[i];
20         }
21         return -1;
22     }
23 }

 稍稍优化一下下:

 1 public class Solution {
 2     public int canCompleteCircuit(int[] gas, int[] cost) {
 3         int count = gas.length;
 4         for(int i = 0; i < count; i++){
 5             if(gas[i] >= cost[i]){
 6                 int totalCost = cost[i];
 7                 int totalGas = gas[i];
 8                 int get = i;
 9                 while(totalGas >= totalCost){
10                     get = (get + 1) % count;
11                     if(get == i) return i;
12                     totalCost += cost[get];
13                     totalGas += gas[get];
14                 }
15             }
16         }
17         return -1;
18     }
19 }
原文地址:https://www.cnblogs.com/huntfor/p/3891345.html