具体思想:
最简单的是暴力搜索;
但是可以进行优化,利用可达思想;
从0~n进行逐节点搜索,找当前节点能够到达的最远距离;
但是注意:
1.如果i能到达j,则i~j之间的节点到达的最远距离不可能超过j,不然矛盾,直接从j开始搜索;;
2.如果i起点大于0,所到达的节点小于i,又0~i-1已经搜索过,所以直接判断不可达即可;
具体代码:
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
for(int i=0;i<gas.size();){
int start=i;
int sum=gas[start];
while(sum-cost[start]>=0){
sum-=cost[start];
start=(start+1)%gas.size();
if(start==i)
return i;
sum+=gas[start];
}
if(start<i)
return -1;
if(start==i)
i++;
else
i=start;
}
return -1;
}
};