[LeetCode] 134. Gas Station
发布时间:2020-12-14 00:15:24 所属栏目:Linux 来源:网络整理
导读:Medium There are? N ?gas stations along a circular route,where the amount of gas at station? i ?is? gas[i] . You have a car with an unlimited gas tank and it costs? cost[i] ?of gas to travel from station? i ?to its next station ( i +1). Yo
Medium There are?N?gas stations along a circular route,where the amount of gas at station?i?is? You have a car with an unlimited gas tank and it costs? Return the starting gas station‘s index if you can travel around the circuit once in the clockwise direction,otherwise return -1. Note:
Example 1: Input: gas = [1,2,3,4,5] cost = [3,5,1,2] Output: 3 Explanation: Start at station 3 (index 3) and fill up with 4 unit of gas. Your tank = 0 + 4 = 4 Travel to station 4. Your tank = 4 - 1 + 5 = 8 Travel to station 0. Your tank = 8 - 2 + 1 = 7 Travel to station 1. Your tank = 7 - 3 + 2 = 6 Travel to station 2. Your tank = 6 - 4 + 3 = 5 Travel to station 3. The cost is 5. Your gas is just enough to travel back to station 3. Therefore,return 3 as the starting index. Example 2: Input: gas = [2,4] cost = [3,3] Output: -1 Explanation: You can‘t start at station 0 or 1,as there is not enough gas to travel to the next station. Let‘s start at station 2 and fill up with 4 unit of gas. Your tank = 0 + 4 = 4 Travel to station 0. Your tank = 4 - 3 + 2 = 3 Travel to station 1. Your tank = 3 - 3 + 3 = 3 You cannot travel back to station 2,as it requires 4 unit of gas but you only have 3. Therefore,you can‘t travel around the circuit once no matter where you start. class Solution { public: int canCompleteCircuit(vector<int>& gas,vector<int>& cost) { int len = gas.size(); for (int i = 0; i < len; ++i) { int tank = 0; int flag = 1; for (int k = 0,j=i; k < len; ++k,++j) { if (j >= len) { j -= len; } tank += gas[j]; if (cost[j] > tank) { flag = 0; break; } else { tank -= cost[j]; } } if (flag==1 && tank >= 0)return i; } return -1; } }; ? 方法二: class Solution { public: int canCompleteCircuit(vector<int>& gas,vector<int>& cost) { int len = gas.size(); int sumGas = 0,sumCost = 0,tank = 0; int start = 0; for (int i = 0; i < len; ++i) { sumCost += cost[i]; sumGas += gas[i]; tank += gas[i]-cost[i]; if (tank < 0) { start = i + 1; tank = 0; } } if (sumCost > sumGas) { return -1; } else return start; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |