leetcode 735 行星碰撞

2021-09-18 02:01:55 字數 1448 閱讀 3876

給定乙個整數陣列asteroids,表示在同一行的行星。

對於陣列中的每乙個元素,其絕對值表示行星的大小,正負表示行星的移動方向(正表示向右移動,負表示向左移動)。每一顆行星以相同的速度移動。

找出碰撞後剩下的所有行星。碰撞規則:兩個行星相互碰撞,較小的行星會**。如果兩顆行星大小相同,則兩顆行星都會**。兩顆移動方向相同的行星,永遠不會發生碰撞。

示例 1:

輸入:asteroids = [5, 10, -5]輸出:[5, 10]解釋:10 和 -5 碰撞後只剩下 10。 5 和 10 永遠不會發生碰撞。
示例 2:

輸入:asteroids = [8, -8]輸出:解釋:8 和 -8 碰撞後,兩者都發生**。
示例 3:

輸入:asteroids = [10, 2, -5]輸出:[10]解釋:2 和 -5 發生碰撞後剩下 -5。10 和 -5 發生碰撞後剩下 10。
示例 4:

輸入:asteroids = [-2, -1, 1, 2]輸出:[-2, -1, 1, 2]解釋:-2 和 -1 向左移動,而 1 和 2 向右移動。

由於移動方向相同的行星不會發生碰撞,所以最終沒有行星發生碰撞。

棧模擬,維護乙個棧,棧中的元素為保留下來的星球,遍歷陣列,分為以下幾種情況

當前元素 > 0 直接入棧,因為棧頂元素無論正負都不會撞到當前元素

當前元素 < 0 在棧頂元素為正且絕對值小於當前元素的情況下出棧,出棧完畢後,如果棧頂元素為正直接入棧,如果為負且絕對值與當前元素相等,那麼棧頂出棧且不入棧,若大於當前元素,也不入棧。

python

class solution:

def asteroidcollision(self, asteroids):

s =

for i in asteroids:

if not s or i > 0 or s[-1] < 0:

else:

while s and s[-1] > 0 and s[-1] < -i:

s.pop()

if s and s[-1] == -i:

s.pop()

elif not s or s[-1] < 0:

return s

leetcode 735 行星碰撞

給定乙個整數陣列 asteroids,表示在同一行的行星。對於陣列中的每乙個元素,其絕對值表示行星的大小,正負表示行星的移動方向 正表示向右移動,負表示向左移動 每一顆行星以相同的速度移動。找出碰撞後剩下的所有行星。碰撞規則 兩個行星相互碰撞,較小的行星會 如果兩顆行星大小相同,則兩顆行星都會 兩顆...

leetcode 735 行星碰撞

給定乙個整數陣列 asteroids,表示在同一行的行星。對於陣列中的每乙個元素,其絕對值表示行星的大小,正負表示行星的移動方向 正表示向右移動,負表示向左移動 每一顆行星以相同的速度移動。找出碰撞後剩下的所有行星。碰撞規則 兩個行星相互碰撞,較小的行星會 如果兩顆行星大小相同,則兩顆行星都會 兩顆...

LeetCode 735 行星碰撞 棧

給定乙個整數陣列 asteroids,表示在同一行的行星。對於陣列中的每乙個元素,其絕對值表示行星的大小,正負表示行星的移動方向 正表示向右移動,負表示向左移動 每一顆行星以相同的速度移動。找出碰撞後剩下的所有行星。碰撞規則 兩個行星相互碰撞,較小的行星會 如果兩顆行星大小相同,則兩顆行星都會 兩顆...