深度遍历:
如果有5个站, 就有5种方案:
1-2-3-4-5
2-3-4-5-1
3-4-5-1-2
。。。
判断每一种是否可能:
class Solution { public: bool isS(int g, vector<int> gas, vector<int> cost, int c) { int n=gas.size(); int s=(c+1)%n; for(int i=0;i<n-1;i++) { g=g+gas[s]-cost[s]; if(g<0) return false; s=(s+1)%n; } return true; } int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { for(int i=0;i<gas.size();i++) { int g=gas[i]-cost[i]; if(g>=0) if (isS(g,gas, cost, i)) return i; else continue; } return -1; } };
使用贪心法的最优子结构:
如果0到i时的累积油量为负值,则0-i开始的值都不行, 从 i开始判断。 并累积总的 diff, 看是否有解
class Solution(object): def canCompleteCircuit(self, gas, cost): """ :type gas: List[int] :type cost: List[int] :rtype: int """ x=0 n=len(gas) cur_g=0 total=0 for i in range(n): diff=gas[i]-cost[i] cur_g=cur_g+diff total=total+diff if cur_g<0: cur_g=0 x=i+1 return x if total>=0 else -1