小行星碰撞

题目链接

小行星碰撞

题目描述

注意点

  • 两个小行星相互碰撞,较小的小行星会爆炸
  • 如果两颗小行星大小相同,则两颗小行星都会爆炸
  • 每一颗小行星以相同的速度移动
  • 正负表示小行星的移动方向(正表示向右移动,负表示向左移动)
  • -1000 <= asteroids[i] <= 1000
  • asteroids[i] != 0

解答思路

  • 首先需要注意的是,本题只有在前一个行星向右移动后一个行星向左移动才会发生碰撞,也就是prev > 0,last < 0
  • 另外需要注意的是,当前行星与前一个行星碰撞后如果当前行星没有爆炸(当前行星体积大于前一个行星体积),其有可能继续与更前面的行星碰撞
  • 利用栈先进后出的特点,对当前行星与栈顶行星进行判断,关键是要找到什么时候应该将当前行星加入到栈中,什么时候应该将栈顶行星弹出(也就是哪些行星会碰撞,发生碰撞哪些行星会爆炸)
    • 如果当前栈中无元素,则一定不会发生碰撞,直接将当前行星加入到栈中
    • 如果不是栈顶行星向右当前行星向左的情况,则一定不会发生碰撞,直接将当前行星加入到栈中
    • 如果当前行星会发生碰撞,则需要一直循环到无行星能与当前行星碰撞或当前行星已爆炸为止。无行星能与当前行星碰撞,可能是栈中没有行星或栈顶行星也向左移动;当前行星爆炸说明栈顶行星的体积不比当前行星小
  • 行星发生碰撞,如果栈顶行星的体积不大于当前行星,则栈顶行星爆炸;如果当前行星的体积不大于栈顶行星,则当前行星爆炸

代码

class Solution {
    public int[] asteroidCollision(int[] asteroids) {
        Deque<Integer> deque = new ArrayDeque<>();
        for (int asteroid : asteroids) {
            if (deque.isEmpty()) {
                deque.offerLast(asteroid);
                continue;
            }
            // 只有之前行星向右当前行星向左才会相撞
            if (!(deque.peekLast() > 0 && asteroid < 0)) {
                deque.offerLast(asteroid);
                continue;
            }
            int curr = -asteroid;
            boolean isAlive = true;
            // 当前向左移动的行星仍然存活、之前有向右移动的行星才会相撞
            while (isAlive && !deque.isEmpty() && deque.peekLast() > 0) {
                // 之前行星只有比当前行星小,当前行星才存活
                isAlive = deque.peekLast() < curr;
                // 之前行星只有比当前行星大,之前行星才存活
                if (deque.peekLast() <= curr) {
                    deque.pollLast();
                }
            }
            if (isAlive) {
                deque.offerLast(asteroid);
            }
        }
        int[] res = new int[deque.size()];
        int i = 0;
        while (!deque.isEmpty()) {
            res[i] = deque.pollFirst();
            i++;
        }
        return res;
    }
}

关键点

  • 行星什么情况下会碰撞
  • 行星什么情况下会爆炸
  • 两颗行星方向不同并不一定就会碰撞,而是只有前一个行星向左移动后一个行星向右移动才会碰撞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/554327.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超净实验室用耐强酸碱耐高温PFA酸缸进口透明聚四氟塑料方槽

PFA清洗槽是四氟清洗桶后的升级款&#xff0c;主要用于半导体光伏光电等行业&#xff0c;一体成型&#xff0c;无需担心漏液&#xff0c;表面光滑无毛刺。 别名PFA浸泡桶、PFA酸缸、PFA方槽等&#xff0c;可定制尺寸&#xff0c;可配套盖子&#xff0c;盖子有PFA/PTFE两种材质…

如何寻找可靠的第三方软件检测机构

随着科技的飞速发展和数字化进程的加速&#xff0c;软件质量成为了企业竞争的关键。为了确保软件的质量和性能&#xff0c;许多企业选择寻找第三方的软件检测机构来进行软件的质量控制和评估。那么&#xff0c;如何找到一家可靠的第三方软件检测机构呢&#xff1f; 1.明确检测…

前段css中border-radius的简单使用

前段css中border-radius的使用 一、前言二、border-radius语法三、border-radius的模型例子1.源码12.源码1效果截图 四、border-radius的动画效果&#xff08;动态交互&#xff09;1.源码22.源码2显示效果 五、结语六、定位日期 一、前言 在CSS中&#xff0c;我们常用border-r…

AUS Global 与皇家贝蒂斯俱乐部在对战皇家马德里的比赛日举办现场体验活动

AUS Global 最近前往西班牙庆祝与皇家贝蒂斯的赞助合作&#xff0c;并获得了难忘的比赛日体验&#xff0c;包括在贵宾室中观看皇家贝蒂斯对阵皇家马德里的精彩比赛。 活动开始时&#xff0c;AUS Global 受邀来到皇家贝蒂斯主场贝尼托-比利亚马林体育场的独家 Showbox 贵宾室。…

微信小程序的支付功能,纯前端步骤,超级详细

1、首先在微信开放平台&#xff0c;申请移动应用并开通支付功能&#xff0c;申请应用后可以获取 AppID 和 AppSecret 值 2、在前端项目中的配置参数中打开支付功能 步骤&#xff1a;项目的根目录下有个manifest.json文件&#xff0c;打开并在左侧目录找到APP SDK配置&#xf…

AI实景无人直播自动卖卷系统,开创了实体商家直播自运营先河。

AI实景无人直播自动卖卷系统&#xff0c;开创了实体商家直播自运营先河。 从当下这一刻起&#xff0c;拒绝内耗&#xff0c;做行动的巨人。因为&#xff0c;命运不会偏袒任何人&#xff0c;却会眷顾一直朝着光亮前进的人。 《人民日报》 随着新媒体的快速发展&#xff0c;很…

【力扣】55. 跳跃游戏 - 力扣(LeetCode)

Problem: 55. 跳跃游戏 记录自己解答的思路和代码 文章目录 问题思路复杂度Code 问题 思路 这个题的主要思路就是先找到0对应的位置&#xff0c;然后标记起来对应left&#xff0c;如果只有一个零&#xff0c;只需要left后面的数中有>1的数就能跳过去&#xff0c;如果是00&a…

Jmeter 接口造10w条用户数据

1、将mysql-connector-java-5.1.22-bin.jar放到D:\apache-jmeter-5.5\lib\ext目录下 2、在测试计划中&#xff0c;添加mysql-connector-java-5.1.22-bin.jar包路径 3、添加-线程组-添加-配置元件-jdbc connection configuration 4、配置jdbc连接参数 设置变量名称&#xff1a;…

【火猫TV】LOL:沙特电竞世界杯奖金公布 奖金丰厚Faker成为最大赢家 !

北京时间4月18日&#xff0c;今年的电竞赛事可以说是缤纷多彩&#xff0c;在LOL项目上除了大家熟悉的各大赛区的联赛&#xff0c;拳头举办的MSI和世界赛&#xff0c;在今年还有一项新的赛事&#xff0c;那就是在MSI结束之后沙特将会举办一场电竞世界杯&#xff0c;此消息出来的…

SpringBoot多数据源(二)

SpringBoot多数据源AbstractRoutingDataSource&#xff08;二&#xff09; 1.多数据源配置2.多数据源调用流程3.实现 1.多数据源配置 spring-jdbc模块提供AbstractRoutingDataSource,其内部可以包含了多个DataSource&#xff0c; 然后在运行时来动态的访问数据库 2.多数据源…

[C++][算法基础]筛选质数(线性筛)

给定一个正整数 n&#xff0c;请你求出 1∼n 中质数的个数。 输入格式 共一行&#xff0c;包含整数 n。 输出格式 共一行&#xff0c;包含一个整数&#xff0c;表示 1∼n 中质数的个数。 数据范围 1≤n≤ 输入样例&#xff1a; 8输出样例&#xff1a; 4 代码&#xf…

vite(vue3)配置内网ip访问的方法步骤

如果没有进行配置&#xff0c;运行项目之后&#xff0c;看到的访问地址是本地访问地址&#xff0c;其他人访问不了。 如下&#xff1a; 一、配置 “ vite.config.ts ” 文件 server: {host: 0.0.0.0 }, 如图所示&#xff1a; 添加 server 配置后保存 “ vite.config.ts ” 文…

2024-04-18 问AI: 介绍一下卷积网络ResNet

文心一言 ResNet&#xff0c;即残差神经网络&#xff0c;是一种通过残差块来构建的神经网络。其核心思想是通过引入残差模块&#xff0c;学习残差而非直接映射&#xff0c;从而解决了深度神经网络中的梯度消失问题&#xff0c;实现了更深层次的网络结构。这种网络结构可以轻松…

js: UrlDecode解码、UUID和GUID、阿拉伯数字转为中文数字

UrlDecode解码&#xff1a; UrlDecode 是一个 JavaScript 函数&#xff0c;用于将经过 URL 编码的字符串转换为普通字符串。 URL 编码是将特殊字符转换为它们的百分比编码表示形式的过程。这些特殊字符包括空格、斜线、井号&#xff08;#&#xff09;等。UrlDecode 函数将这些…

终于总结出一套小红书万能涨粉公式

新手做小红书&#xff0c;最关心的除了变现、提升流量、应该就是涨粉了。 但关于小红书涨粉&#xff0c;小伙伴表示难如登天&#xff0c;臣妾做不到啊。 别担心&#xff0c;小易拆解近100个博主账号后&#xff0c;终于总结出小红书涨粉公式&#xff0c;垂直不违规干货人设活跃…

PMP报考别跟风!搞懂这些问题不踩坑!

1.PMP是什么&#xff1f; 1.PMP(Project ManagementProfessional)的中文全称是项目管理专业人士资格认证。该认证是由美国项目管理协会PMI在全球206个国家发起的针对项目经理的资格认证。 2.PMP认证是目前国际上项目管理领域认可度和含金量最高的证书。通过PMP就证明你的项目…

Java中类装载的执行过程

类装载的执行过程 类从加载到虚拟机中开始&#xff0c;直到卸载为止&#xff0c;它的整个生命周期包括了&#xff1a;加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中&#xff0c;验证、准备和解析这三个部分统称为连接&#xff08;linking&#xff09;。 1.加载 …

EasyPoi实现简单的Excel导出、导入

EasyPoi实现Excel导出、导入 下面这种方式不需要模板&#xff0c;更加方便但是不能进行复杂的导出 一、引入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.4.0</version><…

MyBatis操作数据库(4)

动态sql 动态sql是MyBatis的强大特性之一, 能够完成不同条件下的sql拼接. <if>标签 在注册用户的问题时, 可能会有这样的一个问题:就是说注册时有一些信息是必填的, 而有一些信息是选填的. 那么如果在添加用户的时候有不确定字段的传入, 程序应该如何实现呢? 这时就…

单调队列(C/C++)

引言&#xff1a; 单调队列和单调栈都是一种数据结构&#xff0c;应用十分广泛&#xff0c;在蓝桥杯、ICPC、CCPC等著名编程赛事都是重点的算法&#xff0c;今天博主将自己对单调栈与单调队列的理解以及刷题的经验&#xff0c;用一篇博客分享给大家&#xff0c;希望对大家有所…