题目:134. 加油站
思路:贪心。如果数组gas的总和 < 数组cost的总和,那自然是不可能的。否则是可以的。只需要找到数组gas和数组cost之差最低的时候(小于0),从这个最低点开始出发,后面的部分都会在0的上面。
图片来自灵神
C++版本:
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int id=0;
//注意mn=0,是因为差值和要小于0才需要移动
int mn=0,sum=0;
for(int i=0;i<gas.size();i++){
sum+=gas[i]-cost[i];
if(sum<mn){
mn=sum;
id=i+1;
}
}
return sum>=0?id:-1;
}
};
JAVA版本:
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int id=0;
int mn=0,sum=0;
for(int i=0;i<gas.length;i++){
sum+=gas[i]-cost[i];
if(sum<mn){
mn=sum;
id=i+1;
}
}
return sum>=0? id:-1;
}
}