zoukankan      html  css  js  c++  java
  • Leetcode 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.


    解题思路:

    本题我没想出来,看的答案,思路很巧妙,记住!!

    To solve this problem, we need to understand and use the following 2 facts:
    1) if the sum of gas >= the sum of cost, then the circle can be completed.
    2) if A can not reach C in a the sequence of A-->B-->C, then B can not make it either.

    Proof of fact 2:

    If gas[A] < cost[A], then A can not even reach B. 
    So to reach C from A, gas[A] must >= cost[A]. 
    Given that A can not reach C, we have gas[A] + gas[B] < cost[A] + cost[B],
    and gas[A] >= cost[A],
    Therefore, gas[B] < cost[B], i.e., B can not reach C. 
    

    In the following solution, sumRemaining tracks the sum of remaining to the current index. If sumRemaining < 0, then every index between old start and current index is bad, and we need to update start to be the current index. You can use the following example to visualize the solution.leetcode-gas-station-java


    Java code

    public int canCompleteCircuit(int[] gas, int[] cost) {
            int sumRemaining = 0; //track current remaining
            int total = 0;  // track total ramaining
            int start = 0;
            
            for(int i = 0; i< gas.length; i++){
                int remaining = gas[i] - cost[i];
                
                if(sumRemaining >=0){
                    sumRemaining += remaining;
                }else{
                    sumRemaining = remaining;
                    start = i;
                }
                total += remaining;
            }
            if(total >= 0){
                return start;
            }else {
                return -1;
            }
        }

    Reference:

    1. http://www.programcreek.com/2014/03/leetcode-gas-station-java/

  • 相关阅读:
    jmeter压测-05-xpath表达式
    测试那些事-测试资源篇
    测试那些事-沟通篇
    测试那些事-前端
    测试那些事儿-后端
    记一次大数据量不同处理方式下服务器负载
    jmeter压测dubbo接口,参数为dto时如何写传参及有错误时的分析思路
    pyton3 字典排序
    python测试dubbo接口
    记录一下telnet测试dubbo接口,参数为dto时怎么测试,枚举类型传参
  • 原文地址:https://www.cnblogs.com/anne-vista/p/4831975.html
Copyright © 2011-2022 走看看