算法课第五周 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.

环形路线上有N个加油站,每个加油站有汽油gas[i],从每个加油站到下一站消耗汽油cost[i],问从哪个加油站出发能够回到起始点,如果都不能则返回-1(注意,解是唯一的)。

代码 

#include
#include
#include
using namespace std;
 
// 时间复杂度 O(n),空间复杂度 O(1)
class Solution {
public :
     int canCompleteCircuit(vector< int > &gas, vector< int > &cost) {
         int total = 0 ;
         int j = - 1 ;
         for ( int i = 0 , sum = 0 ; i < gas.size(); ++i) {
             sum += gas[i] - cost[i];
             total += gas[i] - cost[i];
             if (sum < 0 ) {
                 j = i;
                 sum = 0 ;
             }
         }
         return total >= 0 ? j + 1 : - 1 ;
     }
};
 
int main() {
     Solution solution;
     int result;
     vector< int > gas =  { 0 , 4 , 5 };
     vector< int > cost = { 1 , 2 , 6 };
     result = solution.canCompleteCircuit(gas,cost);
     printf( "Result:%d\n" ,result);
     return 0 ;
}

你可能感兴趣的:(算法)