标签:
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.
#include<stdio.h> #include<vector> using namespace std; int canCompleteCircuit(vector<int> &gas, vector<int> &cost) { int i, j ,k ,index = 0, sum = 0, sumold; int n = cost.size(); for(i = 0; i < n; i++) { for(j = index; j < n + i; j++) { if(j >= n) index = j - n; else index = j; sumold = sum; sum = sum + gas[index] - cost[index]; if(sum < 0) { index = j; sum = sumold - gas[i] + cost[i]; break; } } if(j >= n + i && sum >= 0) return i; } if(i == n) return -1; } int main() { int gas1[] = {67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66}; int cost1[] = {27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26}; vector<int> gas; vector<int> cost; gas.push_back(2); gas.push_back(4); cost.push_back(3); cost.push_back(4); printf("%d\n", canCompleteCircuit(gas, cost)); return 1; }
标签:
原文地址:http://blog.csdn.net/uj_mosquito/article/details/43058959