leetcode-134. 加油站
加油站
在一条环路上有 n
个加油站,其中第 i
个加油站有汽油 gas[i]
升。
你有一辆油箱容量无限的的汽车,从第 i
个加油站开往第 i+1
个加油站需要消耗汽油 cost[i]
升。你从其中的一个加油站出发,开始时油箱为空。
给定两个整数数组 gas
和 cost
,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1
。如果存在解,则 保证 它是 唯一 的。
这个题上学期的算法课老师出过一个简易版的,只有一个数组既是gas又是cost。而且测试数据很简单所以直接ac了。这个题就直接写不出来了
1 | class Solution { |
这是自己写的,非常臃肿直接TLE。
从gpt学的解法
1 | class Solution { |
代码太简洁了,我什么时候能写出来这样的代码😭
设置当前油量current
,总油量total
。从0开始遍历,每次total
和current
都加gas[i]
减cost[i]
初始化出发点start
=0,如果current
<0。说明第i个加油站不能做出发点,start
修改为下一个加油站
遍历结束后如果total<0
说明一路上的消耗量大于油量,汽车不能往返一周,返回-1
如果total>=0
,说明可以往返一周,返回start
。
虽然这段路是环形公路,其实和直路没有区别。
如果从i
号加油站能到n-1
号加油站说明total[i,n-1]>=0
.而total[0,i-1]+total[i,n-1] = total >=0
可以理解为从[i,n-1]
油箱里剩的油>=从[0,i-1]油箱’亏欠‘的油。证明了如果能从i
到n-1
,则一定能从i
出发绕一圈再回到i
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 面试资料!