Skip to content

Commit 209ea5c

Browse files
authored
Update 1776-car-fleet-ii.js
1 parent 47569e5 commit 209ea5c

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

1776-car-fleet-ii.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,32 @@
33
* @return {number[]}
44
*/
55
var getCollisionTimes = function(cars) {
6+
//这道题必须想清楚一点,那就是如果ans[i]有正值,那么一定是cars[i]和某个cars[j](j>i且speed[j]<speed[i])
7+
//相撞之后,所谓的融合,其实可以理解为cars[i]消失了,cars[j]状态不变
8+
//所以我们只关注一辆车后面,不关注其前面,它的前面对它没有任何影响。可以考虑从后往前遍历
69
const n = cars.length
710
const ans = Array(n).fill(0)
11+
//设立一个类似单调栈的栈,栈底最慢,栈顶最快
812
const stack = []
913
for(let i = n - 1; i >= 0; i--) {
1014
while(stack.length) {
15+
//如果栈顶比我快,我追不上它,可以考虑等它消失之后我去撞它前面的,所以将它pop
1116
if(cars[stack[stack.length - 1]][1] >= cars[i][1]) stack.pop()
17+
//如果栈顶比我慢,我就决定去碰它了
1218
else {
19+
//如果它不会消失,那我肯定能碰它,break
1320
if(ans[stack[stack.length - 1]] < 0) break
21+
//如果它会消失,我需要计算一下在它消失之前能否追上它
1422
const d = ans[stack[stack.length - 1]] * (cars[i][1] - cars[stack[stack.length - 1]][1])
23+
//能追上,那我肯定碰它,break
1524
if(d > cars[stack[stack.length - 1]][0] - cars[i][0]) break
25+
//追不上,那算了,追它前面的车
1626
else stack.pop()
1727
}
1828
}
1929
if(stack.length === 0) ans[i] = -1
2030
else {
31+
//相对距离除以相对速度
2132
const t = (cars[stack[stack.length - 1]][0]-cars[i][0])/(cars[i][1]-cars[stack[stack.length - 1]][1])
2233
ans[i] = t
2334
}
@@ -26,6 +37,7 @@ var getCollisionTimes = function(cars) {
2637
return ans
2738
};
2839

40+
2941
// another
3042

3143
/**

0 commit comments

Comments
 (0)