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