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

    Hide Tags
     Greedy 

    链接:  http://leetcode.com/problems/gas-station/

    题解:

    经典题gas station,贪婪法。设计一个局部当前的gas,一个全局的gas,当局部gas小于0时,局部gas置零,设置结果为当前index的下一个位置,此情况可能出现多次。当全局gas小于0的话说明没办法遍历所有gas站,返回-1。

    Time Complexity - O(n), Space Complexity - O(1)。

    public class Solution {
        public int canCompleteCircuit(int[] gas, int[] cost) {
            if(gas == null || cost == null || gas.length == 0 || cost.length == 0 || gas.length != cost.length)
                return 0;
            int curGas = 0;
            int totalGas = 0;
            int result = 0;
            
            for(int i = 0; i < gas.length; i++){
                curGas += gas[i] - cost[i];
                totalGas += gas[i] - cost[i];
                if(curGas < 0){
                    result = i + 1;
                    curGas = 0;
                }
            }
            
            if(totalGas < 0)
                return - 1;
            
            return result;
        }
    }

    Update:

    public class Solution {
        public int canCompleteCircuit(int[] gas, int[] cost) {
            if(gas == null || cost == null || gas.length != cost.length || gas.length == 0)
                return -1;
            int len = gas.length;
            int totalGasRequired = 0, curGas = 0, station = 0;
            
            for(int i = 0; i < len; i++) {
                totalGasRequired += gas[i] - cost[i];
                curGas += gas[i] - cost[i];
                if(curGas < 0) {
                    curGas = 0;
                    station = i + 1;
                }
            }
            
            return totalGasRequired >= 0 ? station : -1;
        }
    }

    二刷:

    Java:

    public class Solution {
        public int canCompleteCircuit(int[] gas, int[] cost) {
            if (gas == null || cost == null || gas.length != cost.length) return -1;
            int totalCost = 0, totalGas = 0, curTank = 0, startingIndex = 0;
            
            for (int i = 0; i < gas.length; i++) {
                totalGas += gas[i];
                totalCost += cost[i];
                curTank += (gas[i] - cost[i]);
                if (curTank < 0) {
                    curTank = 0;
                    startingIndex = i + 1;
                }
            }
            return totalGas >= totalCost ? startingIndex : -1;
        }
    }

    测试:

  • 相关阅读:
    centos6安装mono
    Flashcache系统管理员手册
    【ZT】超乎想象 HTML5九大超酷特效体验
    程序员不可不知的C#代码规范
    【推薦】帮你炼成软件架构师的97件事
    [ZT]智能客户端(Smart Client)
    【ZT】成就大型高性能网站的十项规则
    通過SQL取出所有周六/周日的日期到Table
    【杯具】面试才说一句话就被轰出来了
    Integer在webservice的传递
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4438780.html
Copyright © 2011-2022 走看看