在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 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,4,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,3,4] cost = [3,4,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. 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 说明:
示例 1: 输入: gas = [1,2,3,4,5] cost = [3,4,5,1,2] 输出: 3 解释: 从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油 开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油 开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油 开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油 开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油 开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。 因此,3 可为起始索引。 示例 2: 输入: gas = [2,3,4] cost = [3,4,3] 输出: -1 解释: 你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。 我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油 开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油 开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油 你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。 因此,无论怎样,你都不可能绕环路行驶一周。 12ms 1 class Solution { 2 func canCompleteCircuit(_ gas: [Int], _ cost: [Int]) -> Int { 3 var sum = 0 4 var total = 0 5 var start = 0 6 for i in 0..<gas.count{ 7 sum += gas[i] - cost[i] 8 total += gas[i] - cost[i] 9 if sum < 0 { 10 start = i + 1 11 sum = 0 12 } 13 } 14 if total < 0 { 15 return -1 16 } else { 17 return start 18 } 19 } 20 } 16ms 1 class Solution { 2 func canCompleteCircuit(_ gas: [Int], _ cost: [Int]) -> Int { 3 var start = 0, tank = 0, deficit = 0 4 for i in 0..<gas.count { 5 tank += gas[i] 6 if tank >= cost[i] { 7 tank -= cost[i] 8 } else { 9 deficit += cost[i] - tank 10 tank = 0 11 start = i + 1 12 } 13 } 14 if tank < deficit || start == gas.count { return -1 } 15 return start 16 } 17 } 20ms 1 class Solution { 2 func canCompleteCircuit(_ gas: [Int], _ cost: [Int]) -> Int { 3 let totalGas = gas.reduce(0) { $0 + $1 } 4 let totalCost = cost.reduce(0) { $0 + $1 } 5 6 guard totalGas >= totalCost else { 7 return -1 8 } 9 10 var start = 0 11 var gasSum = 0 12 var gasCost = 0 13 14 for (i, currentGas) in gas.enumerated() { 15 let currentCost = cost[i] 16 17 gasSum += currentGas 18 gasCost += currentCost 19 20 if gasSum < gasCost { 21 start = i + 1 22 gasSum = 0 23 gasCost = 0 24 } 25 } 26 return start 27 } 28 } 176ms 1 class Solution { 2 func canCompleteCircuit(_ gas: [Int], _ cost: [Int]) -> Int { 3 guard gas.count > 0 && cost.count > 0 else { 4 return -1 5 } 6 7 var potentailIndex = [Int]() 8 9 for i in 0..<gas.count { 10 if gas[i] - cost[i] >= 0 { 11 potentailIndex.append(i) 12 } 13 } 14 15 16 for index in potentailIndex { 17 var count = gas.count - 1 18 var remining = 0 19 var currentIndex = index 20 for _ in 0...count { 21 remining = gas[currentIndex] + remining - cost[currentIndex] 22 if remining < 0 { 23 break 24 } 25 if currentIndex == count { 26 currentIndex = 0 27 } else { 28 currentIndex += 1 29 } 30 } 31 if remining >= 0 { 32 return index 33 } 34 } 35 36 return -1 37 } 38 }
|
请发表评论