134. 加油站

方法一
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int minSpare = std::numeric_limits<int>::max(); int spare = 0; int len = gas.size(); int index = 0; for (int i = 0; i < len; i++) {spare += gas[i] - cost[i]; if (spare < minSpare) { minSpare = spare; index = i; }}if (spare < 0) return -1; if (minSpare >= 0) return 0; return (index + 1) % len; }
};
方法二
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int length = gas.size();vector<int> dValue(length);for(int i = 0; i < length; i++){dValue[i] = gas[i] - cost[i];}int start = 0;while(start < length){int curSum = 0, count = 0;while(count < length){curSum += dValue[(start+count)%length];if(curSum < 0 ){break;}count++;}if(count == length){return start;}else{start = start + count + 1;}}return -1;}
};
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int length = gas.size(), start = 0;while(start < length){int curSum = 0, count = 0;while(count < length){curSum = curSum + gas[(start+count)%length] - cost[(start+count)%length];if(curSum < 0){break;}count++;}if(count == length){return start;}else{start = start + count + 1;}}return -1;}
};