题目大意
https://leetcode.com/problems/gas-station/
一个环形有n个加油站,每个加油站能为汽车加油量不同,汽车在两站之间耗费油量也不同,假定汽车油桶足够大,问从哪个加油站出发,能不缺油地绕一个环形,如果不存在则返回-1
题目分析
暴力解法是O(n^2),看了下disscuss区的解法https://discuss.leetcode.com/topic/39755/proof-of-if-total-gas-is-greater-than-total-cost-there-is-a-solution-c/2 主要是证明了两点:
- 如果sum(gas) >= sum(cost),那么一定存在方案
- 在假定存在方案的前提下,算法不妨从0开始到n-1遍历,最小的累积sum(gas) - sum(cost)的位置为loc,那么loc+1即为出发点
这两点的证明在原帖中有很详细的解释。我觉得这种trick题真的是不看巧妙解法,自己很难想出来。
代码
|
|
时间复杂度 O(n)