标签:
题目提示采用贪心算法,不知道别人怎么实现的,可以参考下别人的思路。
答案如下:
class Solution { public: vector<int> leftgas; int len; int canCompleteCircuit(vector<int> &gas, vector<int> &cost) { len = gas.size(); int i=0; leftgas.resize(gas.size()); for (i=0; i<len; i++) { leftgas[i] = gas[i] - cost[i]; } pair<bool,int> temp; temp = IndexComplete(); if(temp.first == true) return temp.second; return -1; } pair<bool,int> IndexComplete() { int allgas = 0; int backwardindex = 0; int forwardindex = 0; bool ret; while(1) { allgas +=leftgas[forwardindex++]; if(allgas >= 0) { if(forwardindex == backwardindex || forwardindex == len) return pair<bool,int>(true,backwardindex); } else { ret = SupplyGas(allgas,backwardindex,forwardindex); if(ret == false) return pair<bool,int>(false,backwardindex); } } } bool SupplyGas(int &allgas,int& backwardindex,int forwardindex ) { while(1) { if(backwardindex == 0) { backwardindex = len-1; } else { backwardindex--; } allgas += leftgas[backwardindex]; if(allgas >= 0) { return true; } else { if(backwardindex <= forwardindex) return false; } } } };
标签:
原文地址:http://www.cnblogs.com/xgcode/p/4176286.html