Middle-题目82:134. Gas Station

原创 2016年05月31日 17:01:31

题目原文:
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.
题目大意:
有n个加油站围成一个圈,其中第i个加油站的油量是gas[i].
你有一个汽车,每从第i个加油站开到第i+1个,要消耗cost[i]的汽油。初始油箱为空,问这个汽车能否开完一圈,如果能则返回一个起点位置,否则返回-1.
题目分析:
首先朴素算法就是从每个节点开始开一圈,看看能不能走到头。这样提交会超时。
那么从discuss看到的一个贪心算法,从节点0开始向前开,如果开完一个站点还有油就向前开,如果油量不足,就把出发站点往回移动一站,并从出发点重新开始开,直到遍历完一圈,如果最后油箱里的油≥0,则返回最后的出发点,否则返回-1.
源码:(language:java)

public class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
            if (gas == null) {
                return -1;
            }
            // Note: The Solution object is instantiated only once and is reused by each test case.
            int count = gas.length;

            int n = 0;
            int gasInCar = 0;
            int begin = 0;
            int end = 0;
            int i = 0;
            while (n < count - 1) {
                gasInCar += gas[i] - cost[i];
                if (gasInCar >=0) {//forward
                    end++;
                    i=end;
                } else {
                    begin--;
                    if (begin < 0) {
                        begin = count - 1;
                    }
                    i = begin;
                }

                n++;
            }

            gasInCar += gas[i] - cost[i];

            if (gasInCar >= 0) {
                return begin;
            } else {
                return -1;
            }

        }

}

成绩:
1ms,beats 5.79%,众数1ms,82.52%
Cmershen的碎碎念:
这个算法的理解和实现都不算难,但暂时没想到如何严格证明其正确性。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

[LeetCode]Gas Station 最大子序列和,贪心

在一个环形路径上分布着n个加油站,从一个加油站到下一个加油站会耗油。要找出一个起始点,从这个起始点出发,存油量>=耗油量。解保证唯一。 这要求在路径上不能出现非负的。 如果找出存油量最大的子序列,则可...
  • ckl_soft
  • ckl_soft
  • 2014年11月05日 20:44
  • 2033

算法分析与设计第七周:134. Gas Station

题目简介: There are N gas stations along a circular route, where the amount of gas at station i is gas[...
  • sinat_14826343
  • sinat_14826343
  • 2017年04月01日 16:19
  • 117

Gas Station (环形加油站)

题目:有n个加油站首尾相连成一个圆,已知每个加油站的油量,以及从第i个加油站到第i+1个加油站需消耗的油量,问:能否开车从某个加油站出发,循环一圈又回到起点,如果可以返回出发的起点(车的邮箱容量是无限...
  • elton_xiao
  • elton_xiao
  • 2014年11月14日 10:29
  • 747

134. Gas Station 类别:贪心算法 难度:medium

题目: There are N gas stations along a circular route, where the amount of gas at station i is ga...
  • luoyingmin
  • luoyingmin
  • 2016年11月06日 23:18
  • 52

循环数组——gas station

题目描述       N个加油站呈环形分布,第i个加油站的油量为gas[i],你有一辆可以装无限油量的卡车,并且从加油站i到加油站i+1的途中需要消耗掉cost[i]的油量。油箱为空的条件下...
  • jingsuwen1
  • jingsuwen1
  • 2016年06月08日 17:20
  • 134

LeetCode之Gas Station --环形加油站周游

题目 解法
  • xhu_eternalcc
  • xhu_eternalcc
  • 2014年05月02日 15:54
  • 1042

GAS模型一个更为简洁与正确的理解

GAS模型一个更为简洁与正确的理解
  • wjlwangluo
  • wjlwangluo
  • 2017年03月27日 16:07
  • 1109

GAS工具链的介绍

转自:http://blog.chinaunix.net/uid-26537702-id-3045121.html GAS是GNUBinutils系列二进制工具链当中的一种,主要处理的目标是以...
  • hnzziafyz
  • hnzziafyz
  • 2016年07月12日 09:44
  • 727

以太坊中的Gas以及其设计原理

Gas是一种特别的单位用于Ethereum(以太坊)里,它用来衡量一个行为或者一系列行为有多少“工作量”。 例如: 计算一个Keccak256加密哈希值,每次计算散列时将需要30个气体,加上每25...
  • baidu_36586543
  • baidu_36586543
  • 2017年07月10日 22:57
  • 693

Linux(ubuntu)下30天自制os学习引导,第2天(gas汇编语言)

考虑到书本的后面又使用了gas的汇编语言,所以我们把第三
  • cherishsir
  • cherishsir
  • 2014年05月25日 08:50
  • 889
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目82:134. Gas Station
举报原因:
原因补充:

(最多只允许输入30个字)