735. 行星碰撞
解题思路
-
如果数组元素大于0 说明向右移动 那么不管 左边元素是不是大于0 都不会碰撞
-
如果数组元素小于0 说明想左边移动 那么判断左边元素 如果左边元素大于0 碰撞
-
那么遍历数组
-
当前元素大于0 直接入栈
-
如果当前元素小于0 判断栈顶元素是不是大于0 如果大于0 直接出栈
-
判断存活的元素
-
如果栈顶元素和当前元素的绝对值相等 全部销毁
-
如果栈顶元素大于当前元素的绝对值 当前元素销毁文章来源:https://www.toymoban.com/news/detail-643872.html
-
如果栈顶元素小于当前元素绝对值 栈顶元素出栈 然后还要判断下一个栈顶元素文章来源地址https://www.toymoban.com/news/detail-643872.html
class Solution {
public int[] asteroidCollision(int[] asteroids) {
// 创建一个栈
Stack<Integer> stack = new Stack<>();
// 如果数组元素大于0 说明向右移动 那么不管 左边元素是不是大于0 都不会碰撞
// 如果数组元素小于0 说明想左边移动 那么判断左边元素 如果左边元素大于0 碰撞
// 那么遍历数组
// 当前元素大于0 直接入栈
// 如果当前元素小于0 判断栈顶元素是不是大于0 如果大于0 直接出栈
// 判断存活的元素
// 如果栈顶元素和当前元素的绝对值相等 全部销毁
// 如果栈顶元素大于当前元素的绝对值 当前元素销毁
// 如果栈顶元素小于当前元素绝对值 栈顶元素出栈 然后还要判断下一个栈顶元素
for(int num:asteroids){
// 大于0 直接入栈
if(num >0){
stack.push(num);
}else{
boolean alive = true;
// 当前元素设置存活 并且栈不是空的 栈顶元素大于0
// 循环判断栈顶元素
while(alive && !stack.isEmpty() && stack.peek() > 0){
// 比较绝对值大小
alive = stack.peek() < Math.abs(num);
// 栈顶元素 出栈
if(stack.peek() <= Math.abs(num)){
stack.pop();
}
}
if(alive){
// 如果元素还存活 将元素入栈
stack.push(num);
}
}
}
// 将栈中元素写入数组
int[] ans = new int[stack.size()];
int i = ans.length - 1;;
while(!stack.isEmpty() && i >= 0){
ans[i--] = stack.peek();
stack.pop();
}
return ans;
}
}
到了这里,关于【栈】 735. 行星碰撞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!