题目
这题我一开始没有注意,把cost[i]当作是从上一个加油站开到这一个加油站需要的油耗了,实际题目写的很清楚,是从当前油站开到下一油站的油耗; 因此,只要gas-cost的累加结果一直大于0,那就肯定可以跑一圈!
但是怎么确定要从哪里跑呢,题解中提供了一个很好的思路:
来自:https://leetcode-cn.com/problems/gas-station/solution/shi-yong-tu-de-si-xiang-fen-xi-gai-wen-ti-by-cyayc/
只要我们找到累加的最低点,那么从最低点的下一点开始就是一定可以跑一圈!因为我们已知累加和是大于等于0的,所以从最低点后一个点进行累加是不会再有负数(下降)的情况了!!
代码
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
vector<int> value;
int sum = 0;
for(int i=0;i<gas.size();i++){
sum += (gas[i]-cost[i]);
value.push_back(gas[i]-cost[i]);
}
if(sum<0)
return -1;
sum = 0;
int pos = 0;
int min = INT_MAX;
for(int i=0;i<value.size();i++){
sum+=value[i];
if(sum<min){
min = sum;
pos = i;
}
}
return (pos+1)%value.size();
}
};