返回题库

行星碰撞

Asteroid Collision

专题
Algorithmic Programming / 算法编程
难度
L3
来源
Citadel

题目详情

问题:行星碰撞

考察:数组、栈

来源:Citadel

链接:https://www.jointaro.com/interviews/questions/asteroid-collision/

We are given an array asteroids of integers representing asteroids in a row. The indices of the asteriod in the array represent their relative position in space.

For each asteroid, the absolute value represents its size, and the sign represents its direction (positive meaning right, negative meaning left). Each asteroid moves at the same speed.

Find out the state of the asteroids after all collisions. If two asteroids meet, the smaller one will explode. If both are the same size, both will explode. Two asteroids moving in the same direction will never meet.

 

Example 1:

Input: asteroids = [5,10,-5]
Output: [5,10]
Explanation: The 10 and -5 collide resulting in 10. The 5 and 10 never collide.

Example 2:

Input: asteroids = [8,-8]
Output: []
Explanation: The 8 and -8 collide exploding each other.

Example 3:

Input: asteroids = [10,2,-5]
Output: [10]
Explanation: The 2 and -5 collide resulting in -5. The 10 and -5 collide resulting in 10.

 

Constraints:

  • 2 <= asteroids.length <= 104
  • -1000 <= asteroids[i] <= 1000
  • asteroids[i] != 0
解析

思路:用栈保存当前仍向右或已经稳定的行星。遇到向左行星时,只会和栈顶向右行星碰撞,持续比较绝对值:小的爆炸,相等则两者都消失,直到当前行星被消灭或能入栈。

复杂度:每个行星最多入栈出栈一次,时间 O(n),空间 O(n)。