[leetcode] 134. Gas Station

转载 2016年08月29日 11:04:33

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.

解法一:

dp解法没有通过OJ testtime。

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int len = gas.size();
        vector<int> dp(len,0); //gas when arrives station i
        
        for(int i=0; i<len; i++){
            int step = 0;
            for(int j=i; j<len+i; j++){
                int cur = j<len?j:j-len;
                int next = j+1<len?j+1:j+1-len;
                dp[next] = dp[cur]+gas[cur]-cost[cur];
                if(dp[next]<0){
                    dp[next] = 0;
                    break;
                }
                step++;
            }
            if(step==len) return i;
        }
        return -1;
    }
};


解法二:

如果整个过程中gas的总和大于cost,肯定可以走一圈。有了整个前提,就是遍历一遍数组,sum表示走到当前位置i,还剩的汽油,如果小于零,说明之前假设的出发位置不对,将始发位置改为i+1,sum置为零。

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int len = gas.size();
        int total = 0, sum =0, start = 0;
        
        for(int i=0; i<len; i++){
            total += gas[i]-cost[i];
            sum += gas[i]-cost[i];
            if(sum<0){
                start = i+1;
                sum = 0;
            }
        }
        
        if(total<0) return -1;
        else return start;
    }
};






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

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

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

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

算法分析与设计第七周: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
  • 745

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

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

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

GAS工具链的介绍

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

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

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

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

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

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