File tree Expand file tree Collapse file tree 2 files changed +100
-0
lines changed
solution/0735.Asteroid Collision Expand file tree Collapse file tree 2 files changed +100
-0
lines changed Original file line number Diff line number Diff line change
1
+ ## 行星碰撞
2
+
3
+ ### 问题描述
4
+
5
+ 给定一个整数数组 asteroids,表示在同一行的行星。
6
+
7
+ 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。
8
+
9
+ 找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。
10
+
11
+ ** 示例1:**
12
+ ```
13
+ 输入:
14
+ asteroids = [5, 10, -5]
15
+ 输出: [5, 10]
16
+ 解释:
17
+ 10 和 -5 碰撞后只剩下 10。 5 和 10 永远不会发生碰撞。
18
+ ```
19
+ ** 示例2:**
20
+ ```
21
+ 输入:
22
+ asteroids = [8, -8]
23
+ 输出: []
24
+ 解释:
25
+ 8 和 -8 碰撞后,两者都发生爆炸。
26
+ ```
27
+ ** 说明:**
28
+ - 数组 asteroids 的长度不超过 10000。
29
+ - 每一颗行星的大小都是非零整数,范围是 [ -1000, 1000] 。
30
+
31
+ ### 解法
32
+
33
+ 从左向右遍历数组。
34
+ - 对于遇到的大于零的小行星,应先假定其存活;
35
+ - 对于遇到的小于零的小行星` x ` ,其绝对值为'val',若之前没有大于零的小行星,则此小行星会存活。若之前有大于零的小行星,则从右到左遍历之前存活的小行星:
36
+ - 遇到值小于零的小行星,则小行星` x ` 存活,并停止;
37
+ - 遇到值等于'val'的小行星,那个小行星会爆炸,并停止;
38
+ - 遇到值大于'val'的小行星停止;
39
+ - 遇到值大于零小于'val'的小行星,那个小行星会爆炸,并继续向左遍历;
40
+
41
+ ``` python
42
+ class Solution :
43
+ def asteroidCollision (self , asteroids ):
44
+ if not asteroids:
45
+ return []
46
+ ans = []
47
+ for i in asteroids:
48
+ if i > 0 :
49
+ ans.append(i)
50
+ if i < 0 :
51
+ if not ans or ans[- 1 ] < 0 :
52
+ ans.append(i)
53
+ else :
54
+ while ans:
55
+ if ans[- 1 ] < 0 :
56
+ ans.append(i)
57
+ break
58
+ elif ans[- 1 ] > abs (i):
59
+ break
60
+ elif ans[- 1 ] == abs (i):
61
+ ans.pop(- 1 )
62
+ break
63
+ else :
64
+ ans.pop(- 1 )
65
+
66
+ else :
67
+ ans.append(i)
68
+ return ans
69
+ ```
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def asteroidCollision (self , asteroids ):
3
+ """
4
+ :type asteroids: List[int]
5
+ :rtype: List[int]
6
+ """
7
+ if not asteroids :
8
+ return []
9
+ ans = []
10
+ for i in asteroids :
11
+ if i > 0 :
12
+ ans .append (i )
13
+ if i < 0 :
14
+ if not ans or ans [- 1 ] < 0 :
15
+ ans .append (i )
16
+ else :
17
+ while ans :
18
+ if ans [- 1 ] < 0 :
19
+ ans .append (i )
20
+ break
21
+ elif ans [- 1 ] > abs (i ):
22
+ break
23
+ elif ans [- 1 ] == abs (i ):
24
+ ans .pop (- 1 )
25
+ break
26
+ else :
27
+ ans .pop (- 1 )
28
+
29
+ else :
30
+ ans .append (i )
31
+ return ans
You can’t perform that action at this time.
0 commit comments