题干:
代码:
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int totalcost = 0;
for(int i = 0; i < gas.size(); i++){
totalcost += gas[i] - cost[i];
}
if(totalcost < 0)return -1;
int curcost = 0;
int start = 0;
for(int i = 0; i < gas.size(); i++){
curcost += gas[i] - cost[i];
if(curcost < 0){
start = i + 1;
curcost = 0;
}
}
return start;
}
};
贪心思路:局部最优是gas供给永远大于cost,剩下的(即gas-cost)大于0。以下标0为起点开始把每一个站点的剩余量都算一遍,如果小于0起点就后移一位,同时curcost清零(归零)。
可能会出现的疑惑:如何成环的?以示例一为例,你看cost最后一位不就是从末尾到开头的油耗嘛!如果是直线行驶只会有4个cost。