标签:
有两个向量,一个向量存着gas,gas[i]代表在i点能够获得的gas,另外一个向量存着cost代表从i到i+1(注意循环)需要消耗的gas,希望找个一个地点i,从这个地点i开始能够跑完整个向量,如果不能跑完则返回-1。
思路:设定两个指针start和end,start指向向量尾部,end指向向量头部,设定一个sum记录当前的gas净开销。
如果sum>=0,说明可以往前走,则end++,然后sum加上新的净开销,如果sum<0,说明从start走是走不到end的,那么start退到start-1,加上净开销,看一下是否能够使得sum>0。总体思路就是净开销大于0,往前走,小于0,退一站再尝试。
class Solution {public:int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {int start = gas.size() - 1;int end = 0;int sum = gas[start]-cost[start];while (start > end){if (sum >= 0){sum += gas[end] - cost[end];end++;}else{start--;sum += gas[start] - cost[start];}}return sum >= 0 ? start : -1;}};
标签:
原文地址:http://www.cnblogs.com/flyjameschen/p/4d1ee1af83006a4383c2dce25def19bb.html