leetcode(js)-每日一练之 加油站 题库编号134
leetcode(js)-每日一练之 加油站
- 首先看到这道题的第一思路是,从0号加油站出发,按0-1-2-3-4-0的方向行驶,若中间没油了,则说明从0号加油站出发这种方案是不可行的,我们再改用从1号加油站出发的方案,。。。。。。一个一个试,直到某号加油站可以循环一周,我们最终的答案就是这号加油站,但是这样做有点暴力,不是最优解。
- 接下来说一下比较完美的解法把,空间复杂度o(n),开始跟暴力解法相同,从0号加油站出发,向前走,直到行不通,接下来的做法与暴力解法不同了!!!注意!!!,行不通之后,直接把起始点转移到行不通的加油站上,有人会问,这样做是为啥子呢? 看上面的样式图,会发现0号加油站出发, 1 2 号可以走,由于油量不足,没法走到3号加油站,从0号出发到1号向3号行驶时,1号从0号拿到的油量肯定大于等于0,若开头就从1号出发向3号行驶时,那么其从外部获得的油量肯定=0; 大于等于0的方案都无法实现,等于0肯定无法实现了,所以不用考虑1号,2号同理,直接把3号作为起始点即可!!
- 在整个算法之前,要先判断旅途能不能完成:油总数一定要大于等于油总消耗量
var canCompleteCircuit = function(gas, cost) {
let totalgas = 0;
let totalcost = 0;
for (let i = 0; i < gas.length; i++) {
totalgas += gas[i];
totalcost += cost[i];
}
if (totalgas < totalcost) {
return -1;
}
let currentgas = 0;
let start = 0;
for (let i = 0; i < gas.length; i++) {
currentgas = currentgas + gas[i] - cost[i];
if (currentgas < 0) {
currentgas = 0;
start = i + 1;
}
}
return start;
};
上一篇:
IDEA上Java项目控制台中文乱码
