735.小行星碰撞

简介: 735.小行星碰撞

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

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

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

解题思路:使用栈st 模拟行星碰撞,从左往右遍历行星数组asteroids,当我们遍历到行星aster时,使用变量alive 记录行星aster 是否还存在。

当行星 aster 存在且 aster

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        Deque<Integer> stack = new ArrayDeque<Integer>();
        for (int aster : asteroids) {
            boolean alive = true;
            while (alive && aster < 0 && !stack.isEmpty() && stack.peek() > 0) {
                alive = stack.peek() < -aster; // aster 是否存在
                if (stack.peek() <= -aster) {  // 栈顶行星爆炸
                    stack.pop();
                }
            }
            if (alive) {
                stack.push(aster);
            }
        }
        int size = stack.size();
        int[] ans = new int[size];
        for (int i = size - 1; i >= 0; i--) {
            ans[i] = stack.pop();
        }
        return ans;
    }
}


相关文章
|
4天前
649.Dota2 参议院
649.Dota2 参议院
20 1
|
4天前
|
存储 缓存 安全
Linux系统内核面试题
Linux系统内核面试题
28 3
|
6月前
|
Web App开发 存储 JavaScript
JavaScript基础入门1
JavaScript基础入门
87 0
|
4天前
|
C语言
第一章 C语言知识点(程序)
第一章 C语言知识点(程序)
18 0
|
4天前
|
API 持续交付 开发者
构建高效微服务架构:后端开发的新视角
【5月更文挑战第8天】 随着现代软件开发的演变,微服务架构已经成为了企业追求敏捷、可扩展和灵活部署的重要解决方案。本文将深入探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术栈选择以及持续集成与部署的最佳实践。我们还将讨论微服务带来的挑战,如数据一致性、服务发现和网络延迟,并提出相应的解决策略。通过本文,后端开发者将获得构建和维护微服务系统所需的深度知识,并了解如何在不断变化的技术环境中保持系统的健壮性和可维护性。
43 8
|
4天前
933.最近的请求次数
933.最近的请求次数
13 0
|
4天前
|
网络协议 Unix Linux
Linux习题7
Linux习题7
9 0
|
4天前
394.字符串解码
394.字符串解码
18 3
|
4天前
15.三数之和
15.三数之和
11 0
|
4天前
392.判断子序列
392.判断子序列
10 0