一条直线上有一些点,每个点有不同方向不同大小的速度,可用[][]int{[1, 3], [3, -1], [10, 2]...} 来表示,其中下标0表示点在直线上的位置,下标1表示点的速度大小(正数向右,负数向左)
1、求第一次碰撞发生的时间?
2、如果每两个点撞击后都会消失,求稳定后,直线上都剩下哪几个点?
3、可能每个点都有自重,自重相同的点撞击后两两消失,自重不同的点撞击后,小的会消失,大的会保留,求稳定状态?
最近看到前面这道题,发现leetcode上有个类似的题目,就拿出来做一下。
直接上解法:
我们认为,先撞击的一定是相邻的两个元素,故我们可以想到,先拿一个for循环遍历数组,每次只判断当前点与它的左侧点会不会碰撞。
实现上,我们拿一个栈来存放存活的点,当前点每次与栈顶判断是否碰撞,碰撞则考虑点消除情况;不碰撞则入栈,向后遍历
时间复杂度O(n), 空间复杂度O(n)
func as