小行星碰撞

news2024/11/25 22:58:07

题目链接

小行星碰撞

题目描述

注意点

  • 两个小行星相互碰撞,较小的小行星会爆炸
  • 如果两颗小行星大小相同,则两颗小行星都会爆炸
  • 每一颗小行星以相同的速度移动
  • 正负表示小行星的移动方向(正表示向右移动,负表示向左移动)
  • -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;
    }
}

关键点

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day81 session会话 文件上传

知识点&#xff1a; session 文件上传 一 session 1&#xff09;session&#xff1a;会话 在服务器端存储信息 指客户与服务器的会话 当用户通过浏览器访问服务器的某个页面时&#xff0c;在服务器开辟一个内存空间session 每个session 有唯一的id 2&#xff09;session过期 …

安全开发实战(3)--存活探测与端口扫描

目录 安全开发专栏 前言 存活探测 端口扫描 方式一: 1.3.1 One 1.3.2 Two 1.3.3 批量监测 方式二: 1.3.1 One 1.3.2 Two 1.3.3 Three 1.3.4 扫描ip地址,提取出开放端口和协议 ​编辑 1.3.5 批量扫描(最终完成版) 总结 安全开发专栏 安全开发实战​http://t.csd…

javaee前后端交互

1.选择Java Enterprise创建项目 2.勾选Web Profile 3.项目名称 4.创建包和类 5.继承HttpServlet并重写方法doGet和doPost 6.在web.xml里添加代码 7.点击Add Configuration,进去后点击加号 8.选择选项 9.调整如图&#xff0c;后选择Deployment进入 10.点击加号选择第一个 11.…

【GoWeb框架初探————Gin篇】

1. Gin 1.1 下载相应依赖 创建go项目&#xff0c;在项目下建立go.mod文件&#xff08;若有则跳过&#xff09; 命令行运行 go get github.com/gin-gonic/gin1.2 启动一个简单Web服务 package mainimport ("github.com/gin-gonic/gin""github.com/thinkerou/…

如何正确查看容器的CPU使用率

进入容器中top&#xff0c;虽然看到的PID是容器的&#xff0c;但是%Cpu的统计信息却是宿主机的。 如图 原理 进程的cpu使用率是如何计算出来的&#xff1f; 每个进程的状态是放在文件里的&#xff0c;在/proc目录下&#xff0c;每个进程有自己pid命名的文件夹&#xff0c; …

vscode 如何支持点击函数跳转

一、配置方式 我要配置的是 python 语言&#xff0c;以 python 语言为例来设置 1、在扩展商店搜索 python 并安装 2、安装完成后点击设置按钮&#xff0c;进入扩展设置 3、在扩展设置中搜索 go to definition&#xff0c;将下面红框的两项设置为 goto 4.连接远程服务器后还需…

基于go+vue的多人在线聊天的im系统

基于govue的多人在线聊天的im系统 文章目录 基于govue的多人在线聊天的im系统一、前端部分二、后端部分1、中间件middleware设计jwt和cors2、配置文件设计3、Mysql和Redis连接4、路由设计5、核心功能设计 一、前端部分 打算优化一下界面&#xff0c;正在开发中。。。 二、后端…

软件测试入门学习笔记

系统测试流程规范 一.研发模型 1.瀑布模型 从可行性研究&#xff08;或系统分析&#xff09;开始&#xff0c;需求 2.增量迭代模型 3.敏捷开发模型 二.质量模型

神经网络中正则化和正则化率的含义

在神经网络中,正则化是一种用于防止模型过拟合的技术。过拟合是指模型在训练数据上表现得很好,但是对于未见过的新数据,其泛化能力却很差。正则化通过在损失函数中添加一个额外的项来惩罚模型的复杂度,从而鼓励模型学习更加简单、更加泛化的特征。 正则化的含义 正则化通常…

如何修改WordPress数据库表前缀以提高安全性

WordPress作为世界上最受欢迎的内容管理系统之一&#xff0c;吸引了数以百万计的用户。然而&#xff0c;正因为其广泛的使用&#xff0c;WordPress网站也成为了黑客攻击的目标之一。其中一个最常见的安全漏洞是使用默认的数据库表前缀wp_&#xff0c;使得黑客能够更轻松地进行大…

引导过程和服务控制

目录 一.Linux操作系统的引导过程 1.开机自检&#xff08;BIOS&#xff09;&#xff1a; 2.MBR引导&#xff1a; 3.启动GRUB菜单&#xff1a; 4.加载Linux内核 5.init进程初始化 二.系统初始化进程 1.init 进程 2.Systemd 2.1 systemd 概述 2.2 Systemd 与 传统 Sy…

设计千万级并发系统架构需要考虑的各方面因素

设计千万级并发系统架构需要考虑多方面因素&#xff0c;包括系统的可伸缩性、高可用性、性能、安全性等。 1、分布式架构&#xff1a; 使用微服务架构&#xff1a;将系统拆分成多个独立的服务&#xff0c;每个服务都可以独立部署和扩展。 使用分布式服务框架&#xff1a;如S…

Unity类银河恶魔城学习记录12-11 P133 Merge Skill Tree with Parry skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Parry_Skill.cs using UnityEngine; using UnityEngine.UI;public class P…

Python多态

1.多态 多态定义&#xff1a;多态&#xff08;polymorphism&#xff09;是指同一个方法调用由于对象不同可能会产生不同的行为 注意以下2点&#xff1a; 1.多态是方法的多态&#xff0c;属性没有多态。 2.多态的存在有2个必要条件&#xff1a;继承、方法重写 class Animal:de…

LearnOpenGl练习题-着色器

LearnOpenGl练习题-着色器 题目地址&#xff1a;着色器 - LearnOpenGL CN 题目一&#xff1a;修改顶点着色器让三角形上下颠倒&#xff1a; #version 330 core layout (location 0) in vec3 aPos; layout (location 1) in vec3 aColor; out vec3 ourColor; void main() {gl…

openEuler 22.03 LTS SP3源码编译部署OpenStack-Bobcat(Neutron使用OVN)

openEuler 22.03 LTS SP3部署OpenStack-Bobcat 说明机器详情安装操作系统注意事项基础准备Controller节点 && Compute节点 && Block节点关闭防火墙关闭selinux设置静态IP更新安装前准备Controller节点 && Compute节点 && Block节点设置主机名配…

简单认识Git(dirsearch、githack下载),git泄露(ctfhub)

目录 dirsearch下载地址: githack下载&#xff08;一次不成功可多试几次&#xff09; 一、什么是Git 1.git结构 2.git常用命令及示例 3.Git泄露原理 二、Git泄露 1.Log 2.Stash 3.Index 工具准备&#xff1a;dirsearch、githack dirsearch下载地址: GitHub - mauroso…

配置流策略实现不同网段间限制互访

在创建了 vlanif 接口并配置 IP 地址后,不同 vlan 间就可以互通了。 如果我们想要限制vlan 之间的通信,就可以通过配置流策略实现。 配置步骤(以华为交换机为例) 1、ACL 定义拒绝通过的数据流 2、定义流分类,按照ACL 对报文进行分类 3、配置流行为,动作为deny 4、配置流…

计算机不联网是否有IP地址

计算机不联网是否会有IP地址&#xff0c;这个问题涉及到计算机网络的基础知识。要深入探讨这个问题&#xff0c;我们需要从IP地址的定义、作用&#xff0c;以及计算机在不联网状态下的网络配置等多个方面进行分析。 首先&#xff0c;IP地址&#xff08;Internet Protocol Addre…

深度学习——常用激活函数解析与对比

1、 简介 在神经网络中&#xff0c;激活函数扮演着至关重要的角色。它们的主要目的是引入非线性因素&#xff0c;使得网络能够学习和表示更加复杂的函数映射。以下是激活函数应具备的特点&#xff0c;以及这些特点为何重要的详细解释&#xff1a; 引入非线性有助于优化网络&am…