Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
给出一列数,负数代表向左移动,正数代表向右移动,如果连着的两个数分别向右和向左,则会碰撞,只剩下绝对值更大的那一个数,问所有碰撞结束之后剩下的list
基本栈操作


 1 #735
 2 #Runtime: 98 ms (Beats 14.98%)
 3 #Memory: 14.6 MB (Beats 16.21%)
 4 
 5 class Solution(object):
 6     def asteroidCollision(self, asteroids):
 7         """
 8         :type asteroids: List[int]
 9         :rtype: List[int]
10         """
11         stk = [asteroids[0]]
12         for x in asteroids[1:]:
13             stk.append(x)
14             while len(stk) > 1 and stk[-2] > 0 and stk[-1] < 0:
15                 pre1 = stk[-1]
16                 pre2 = stk[-2]
17                 stk.pop()
18                 stk.pop()
19                 if abs(pre1) != abs(pre2):
20                     stk.append(pre1) if abs(pre1) > abs(pre2) else stk.append(pre2)
21         return stk

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理