[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.

 

Hide Tags
  Greedy
 
  一道贪心算法的题目。
 
#include <iostream>

#include <vector>

using namespace std;



class Solution {

public:

    int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {

        int n = gas.size();

        if(n==0||n!=cost.size())  return -1;

        if(n==1)    return gas[0]>=cost[0]?0:-1;

        int stardIdx =0,endIdx = 0;

        int leave = 0;

        do{

            if(leave+gas[endIdx]>=cost[endIdx]){

                leave = leave+gas[endIdx]-cost[endIdx];

                endIdx++;

                if(endIdx==n)   endIdx = 0;

                continue;

            }

            stardIdx--;

            if(stardIdx==-1)    stardIdx=n-1;

            leave = leave + gas[stardIdx] - cost[stardIdx];

        }while(stardIdx!=endIdx);

        if(leave >=0)   return stardIdx;

        return -1;

    }



};



int main()

{

    vector<int > gas{4};

    vector<int > cost{5};

    Solution sol;

    cout<<sol.canCompleteCircuit(gas,cost)<<endl;

//    for(int i=0;i<gas.size();i++){

//        cout<<gas[i]<<endl;

//    }

    return 0;

}

 

你可能感兴趣的:(LeetCode)