Leetcode 735 行星碰撞 C

2021-10-08 16:50:00 字數 1434 閱讀 8658

給定乙個整數陣列 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 向右移動。

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

說明:

由題意可知,我們最終的答案可以分為兩部分,左邊為負數,後邊為整數,其中某個部分可能沒有元素。我們用乙個雙端佇列儲存答案。

我們維持雙端佇列,如果當前數是負數,佇列頂是整數,我們就判斷是否發生碰撞,進行出佇列和修改當前行星的操作。詳細過程見**

vector<

int>

asteroidcollision

(vector<

int>

& asteroids)

else

if(dq.

back()

==-asteroids[i]

)else}if

(asteroids[i]!=0

)//當前數沒有發生保證,壓入雙端佇列中

dq.push_back

(asteroids[i]);

} vector<

int> ans;

while

(!dq.

empty()

)return ans;

}

leetcode 735 行星碰撞

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

leetcode 735 行星碰撞

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

leetcode 735 行星碰撞

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