其他分享
首页 > 其他分享> > 2022-8-7 剑指offer-栈

2022-8-7 剑指offer-栈

作者:互联网

剑指 Offer II 037. 小行星碰撞

难度中等

给定一个整数数组 asteroids,表示在同一行的小行星。

对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。

找出碰撞后剩下的所有小行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。

 1 class Solution {
 2     public int[] asteroidCollision(int[] asteroids) {
 3         ArrayDeque<Integer> stack=new ArrayDeque<>();
 4         int n=asteroids.length;
 5         for (int x:asteroids){
 6             if (stack.isEmpty()){
 7                 stack.push(x);
 8             }else{
 9                 if (stack.peek()*x>0){
10                     stack.push(x);
11                 }else{
12                     if (stack.peek()>0){
13                         while (!stack.isEmpty()&&stack.peek()>0&&stack.peek()<-x){
14                             stack.pop();
15                         }
16                         if (stack.isEmpty()){
17                             stack.push(x);
18                         }else if (stack.peek()==-x){
19                             stack.pop();
20                         }else if (!(stack.peek()>-x)){
21                             stack.push(x);
22                         }
23                     }else{
24                         stack.push(x);
25                     }
26                 }
27             }
28         }
29         int[] ans=new int[stack.size()];
30         for (int i=ans.length-1;i>=0;i--){
31             ans[i]=stack.pop();
32         }
33         return ans;
34     }
35 }

思路:用栈模拟行星碰撞,要考虑所有的情况。

标签:offer,int,asteroids,碰撞,2022,行星,stack,小行星
来源: https://www.cnblogs.com/benbicao/p/16558873.html