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.

    此题题目意思是从环型加油站中选择一个加油站出发,使其能够回到起始点。

    最基本的方法是暴力,用一个二重循环解决

    本题考虑到汽车到达一个加油加上gas[i]的油,行走到下一个加油站时,剩下的油为gas[i]-cost[i]

    首先判断所有的sum(gas[0..n))是否大于sum(cost[0..n))的和

     如果小于的话,说明不可能有剩余的油,不可能对每个环形加油站都走一遍,故返回-1

    如果大于等于的话,说明存在可能走完所有环形加油站

      累积每个加油站加油行走后剩余的油即sum(gas[i]-cost[i]),标记初始索引

      如果sum < 0说明从标记索引不可能走到,故重新标记一下一个索引,重新计数知道循环结束,返回标记索引

    int canCompleteCircuit(vector<int>& gas, vector<int> &cost){
        vector<int> leave(gas.size(),0);
        transform(gas.begin(),gas.end(),cost.begin(), leave.begin(),minus<int>());
        if(accumulate(leave.begin(),leave.end(),0) < 0) return -1;
        int sum = 0, index = 0;
        for(int i = 0; i < leave.size(); ++ i){
            sum+=leave[i];
            if(sum < 0) sum = 0,index = i+1;
        }
        return index;
    }
  • 相关阅读:
    FZU 2112 并查集、欧拉通路
    HDU 5686 斐波那契数列、Java求大数
    Codeforces 675C Money Transfers 思维题
    HDU 5687 字典树插入查找删除
    HDU 1532 最大流模板题
    HDU 5384 字典树、AC自动机
    山科第三届校赛总结
    HDU 2222 AC自动机模板题
    HDU 3911 线段树区间合并、异或取反操作
    CodeForces 615B Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3796643.html
Copyright © 2011-2022 走看看