735. 行星碰撞
735. 行星碰撞
給定一個(gè)整數(shù)數(shù)組 asteroids,表示在同一行的行星。
對(duì)于數(shù)組中的每一個(gè)元素,其絕對(duì)值表示行星的大小,正負(fù)表示行星的移動(dòng)方向(正表示向右移動(dòng),負(fù)表示向左移動(dòng))。每一顆行星以相同的速度移動(dòng)。
找出碰撞后剩下的所有行星。碰撞規(guī)則:兩個(gè)行星相互碰撞,較小的行星會(huì)爆炸。如果兩顆行星大小相同,則兩顆行星都會(huì)爆炸。兩顆移動(dòng)方向相同的行星,永遠(yuǎn)不會(huì)發(fā)生碰撞。
示例 1:
輸入:asteroids = [5,10,-5] 輸出:[5,10] 解釋:10 和 -5 碰撞后只剩下 10 。 5 和 10
永遠(yuǎn)不會(huì)發(fā)生碰撞。 示例 2:
輸入:asteroids = [8,-8] 輸出:[] 解釋:8 和 -8 碰撞后,兩者都發(fā)生爆炸。 示例 3:
輸入:asteroids = [10,2,-5] 輸出:[10] 解釋:2 和 -5 發(fā)生碰撞后剩下 -5 。10 和 -5 發(fā)生碰撞后剩下
10 。 示例 4:
輸入:asteroids = [-2,-1,1,2] 輸出:[-2,-1,1,2] 解釋:-2 和 -1 向左移動(dòng),而 1 和 2
向右移動(dòng)。 由于移動(dòng)方向相同的行星不會(huì)發(fā)生碰撞,所以最終沒(méi)有行星發(fā)生碰撞。
來(lái)源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/asteroid-collision
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
題目分析:
遍歷數(shù)組,每次得到的數(shù)字,要么是正數(shù),要么是負(fù)數(shù)。
根據(jù)題意,負(fù)數(shù)是向左走,正數(shù)是向右走。
前后兩次遍歷到的數(shù)字,總共有四種可能,即:
從上面的分析可以看出,如果前一個(gè)數(shù)是負(fù)數(shù)的話,不可能與后一個(gè)數(shù)發(fā)生爆炸,如果前一個(gè)數(shù)是正數(shù)的話,則會(huì)爆炸,保留誰(shuí),則要看二者之間的大小關(guān)系:
- 正數(shù)+負(fù)數(shù)=0,兩個(gè)數(shù)都沒(méi)了
- 正數(shù)+負(fù)數(shù)<0,保留負(fù)數(shù)
- 正數(shù)+負(fù)數(shù)>0,保留正數(shù)
程序設(shè)計(jì)
用棧保存結(jié)果
遍歷數(shù)組,當(dāng)前遍歷到item
- 如果item是整數(shù),則保存在棧中
- 如果是負(fù)數(shù),會(huì)不會(huì)爆炸則與棧頂元素有關(guān)。
- 步驟一
- 如果棧是空的,則保存item,
- 如果棧頂是負(fù)數(shù),不爆炸,item入棧
- 如果棧頂top是正數(shù),爆炸,
1)top + item > 0,則不保存item,繼續(xù)下一輪的遍歷
2)top + item == 0,則不保存item,同時(shí)彈出top,繼續(xù)下一輪的遍歷
3)top + item < 0, 即top沒(méi)有item的絕對(duì)值大,則需要彈出top, item繼續(xù)與棧頂元素比較,跳到步驟一處進(jìn)行比較。
總結(jié)
- 上一篇: 格式化输出--对齐及补全
- 下一篇: if else复合语句