zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    构建之法阅读笔记03
    构建之法阅读笔记02
    构建之法读书笔记01
    梦断代码读书笔记03
    背包九讲问题
    C-01背包问题
    C-最长回文子串(2)
    C-最长回文子串(1)
    C语言顺序栈实现
    带头结点头部插入创建链表
  • 原文地址:https://www.cnblogs.com/huntfor/p/3891345.html
Copyright © 2011-2022 走看看