【LeetCode 75】第二十五题(735)行星碰撞

news2024/11/23 8:32:56

目录

题目:

示例:

分析:

代码+运行结果:


题目:

示例:

分析:

给一个数组,数组里的元素表示行星,元素的符号决定行星运动的方向,元素的绝对值决定行星的大小,当行星发生碰撞,较小的行星会爆炸(消失),返回爆炸结束后的行星数组。

这种相邻元素发生操作的,以及有一定顺序要求的题目,都是可以用栈来做的.

由于题目要求返回vector,因此我们就用vector来模拟栈的操作,使用 *(vector.end()-1) 来获取栈顶元素,使用vector.pop_back()来弹出栈顶元素.

首先我们遍历小行星群(原数组),然后再进入判断,如果栈为空,那么不会发生碰撞,不用进一步判断,因此直接入栈.

如果小行星和栈顶的行星的同一个方向的(符号相同),那么也不会发生碰撞,也直接入栈.

然后如果小行星和栈顶行星方向不一样也不一定会发生碰撞,如果栈顶行星往左走(符号为-),而小行星往右走(符号为+),那么即使它们运动方向不一样也是不会发生碰撞的.

如果小行星左走,栈顶行星右走,那么它们就会发生碰撞,这时候我们需要进一步判断.

如果小行星更大,那么栈顶行星爆炸,我们将其出栈,并且由于可能新来的小行星会和新的栈顶行星接着发生碰撞,因此我们需要while循环判断.

如果栈顶行星更大,那么小行星爆炸,我们不用操作.

如果它们一样大,那么一起爆炸,将栈顶元素弹出,然后退出判断循环.

代码+运行结果:

class Solution {
public:
    vector<int> asteroidCollision(vector<int>& asteroids) {
        vector<int>stack;
        for(int &a:asteroids){
            //判断栈是否为空,并且判断栈顶元素是否和新来的行星是同号
            if(stack.empty()||*(stack.end()-1)*a>0) stack.push_back(a);
            else{
                //如果栈顶元素和新来行星不同号,则可能发生碰撞(左正右负发生碰撞,左负右正不发生碰撞)
                while(!stack.empty()){
                    int temp=*(stack.end()-1);
                    if(a<0 && temp>0){  //如果是左正右负的情况则发生碰撞.
                        //如果栈顶元素比新来行星更大,那么新来的行星会爆炸,退出循环
                        if(temp>-a) break;  
                        //如果相同,两个一起爆炸,弹出栈顶元素,退出循环
                        else if(a==-temp){  
                            stack.pop_back();
                            break;
                        }
                        //如果新行星更大,那么栈顶爆炸(弹出)
                        else{
                            stack.pop_back();
                            //再做个判断,如果栈顶弹出后为空了,还需要把新行星入栈,然后退出循环.
                            if(stack.empty()){
                                stack.push_back(a);
                                break;
                          }  
                        }
                    }else{  //反之左负右正不发生碰撞,退出循环.
                        stack.push_back(a);
                        break;
                    }
                }
            }
        }
        return stack;
    }
};

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

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

相关文章

谷歌发布RT-2大模型,让机器人像人类那样思考

原创 | 文 BFT机器人 大语言模型是指基于深度学习技术的大规模预训练模型&#xff0c;它能够通过学习大量的文本数据来生成人类类似的语言表达&#xff0c;机器人可以通过对大量的语言数据进行学习&#xff0c;从中掌握人类的语言表达方式&#xff0c;进而能够更好地与人进行交…

冠达管理:股票注册制通俗理解?

目前我国A股商场正在进行股票注册制变革&#xff0c;相较之前的发行准则&#xff0c;股票注册制在理念上更为商场化&#xff0c;这意味着公司发行股票的门槛将下降&#xff0c;公司数量将添加&#xff0c;而股票流通的方式也将有所改变。那么股票注册制指的是什么&#xff0c;它…

日常报错记录

日常报错记录 Shorten the command line via JAR manifest or via a classpath file and rerun 解决方法如下&#xff1a;

代码分析:waitpid的使用,非阻塞轮回检测技术

wait 函数 wait函数的作用是父进程调用&#xff0c;等待子进程退出&#xff0c;回收子进程的资源&#xff1b; #include<sys/types.h> #include<sys/wait.h> pid_t wait(int*status);返回值&#xff1a; 成功返回被等待进程pid&#xff0c;失败返回-1。 参数&…

B2B2C小程序商城系统--跨境电商后台数据采集功能开发

搭建一个B2B2C小程序商城系统涉及到多个步骤和功能开发&#xff0c;其中包括跨境电商后台数据采集功能的开发。具体搭建步骤如下&#xff1a; 一、系统搭建 1. 确定需求和功能&#xff1a;根据B2B2C商城的需求&#xff0c;确定系统的功能和模块&#xff0c;包括商品管理、订单…

大数据离线阶段02:Apache Hadoop

Hadoop介绍 Hadoop是Apache旗下的一个用java语言实现开源软件框架&#xff0c;是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。 狭义上说&#xff0c;Hadoop指Apache这款开源框架&#xff0c;它的核心组件有…

一款用于监控电路监控数字系统中的电源 电压监控器 CAT809STBI-GT3

什么是电压监控器&#xff1f; 电压监控器是一种用于监测电力系统中电压水平的设备。它通常用于检测电压的变化、波动或异常情况&#xff0c;以确保电力系统的稳定运行。电压监控器可以监测不同电压水平&#xff0c;例如交流电系统中的电压、直流电系统中的电压等并将其显示在…

【中危】 Apache Traffic Server Range 标头验证不当

漏洞描述 Apache Traffic Server&#xff08;ATS&#xff09;是一个开源的反向代理和缓存服务器。 受影响版本中&#xff0c;由于 HttpTransact 类未对无效 Range 标头进行过滤&#xff0c;并且 URL 类未对传入 URL 参数的重复斜杠进行过滤&#xff0c;攻击者可利用此漏洞对 …

docker-compose部署milvus

部署milvus 上一篇介绍了使用kubernetes来部署milvus&#xff0c;这篇介绍下使用docker-compose来部署milvus。 下载docker-compose docker-compose的Github地址https://github.com/docker/compose/releases下载最新版的 docker-compose-linux-x86_64 在服务器上使用 wget …

问道管理:燃气板块拉升走高,胜通能源涨停,欧洲天然气价飙升

燃气板块10日盘中发力走高&#xff0c;到发稿&#xff0c;美能动力、胜通动力、水发燃气涨停&#xff0c;首华燃气涨约8%&#xff0c;山东墨龙、贵州燃气涨逾7%&#xff0c;贝肯动力涨逾5%。 消息面上&#xff0c;因液化天然气供给危险添加&#xff0c;美国天然气期货日内大涨7…

【数据结构OJ题】合并两个有序数组

原题链接&#xff1a;https://leetcode.cn/problems/merge-sorted-array/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 看到这道题&#xff0c;我们注意到nums1[ ]和nums2[ ]两个数组都是非递减的。所以我们很容易想到额外开一个数组tmp[ ]&#x…

大运空瓶行动,绘就生态文明画卷

随着成都第31届世界大学生夏季运动会赛事的成功举办&#xff0c;为了倡导节约水资源、绿色大运&#xff0c;在此之前成都电视2台《城视民生》栏目面向全市发起“大运空瓶行动”的倡议&#xff0c;呼吁市民杜绝水资源浪费&#xff0c;喝完瓶中水&#xff0c;并鼓励市民积极参与到…

vscode-启动cljs

打开vscode &#xff0c;打开cljs项目文件 先npm installvscode安装插件Calva: Clojure & ClojureScript启动REPL 选择Start yout project with a REPL and connect(a.k.a. jack) 后选择shadow-cljs&#xff0c;然后选择shadow&#xff0c;如果需要选择build的话&#xf…

【香瓜说职场】漫长的瓶颈期(2019.03.29)

自从17年4月份开始辞职创业&#xff0c;已经2年了。聊聊近况。 一、公司现状 1、关于淘宝店 淘宝店上架了些开发板相关的衍生产品&#xff0c;单品销量很低&#xff0c;但通过种类来获取销售额。尽管如此&#xff0c;依然不足以支付我和客服两人的工资费用。每月亏损几千。 2、…

【插入排序】直接插入排序 与 希尔排序

目录 1. 排序的概念&#xff1a; 2.插入排序基本思想 3.直接插入排序 4.希尔排序 1. 排序的概念&#xff1a; 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xf…

儿童滑梯CE认证标准EN71测试标准

我国是玩具出口大国&#xff0c;目前的主要出口目标市场是欧洲市场&#xff0c;其中出口欧洲市场的玩具平均约占据我国玩具年出口额的40%左右。 EN 71是欧盟国家强制执行的标准&#xff0c;针对为14岁以下的儿童设计的玩具。其意义是通过EN71标准对进入欧洲市场的玩具产品进行…

flowable-ui部署(6.80)

前置条件&#xff1a;Apache Tomcat/9.0.78版本及以下 https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.78/bin/apache-tomcat-9.0.78-windows-x64.zip 一、下载资源 https://github.com/flowable/flowable-engine/releases/download/flowable-6.8.0/flowable-6.8.0.zip 二…

如何用瀑布图分析公司年报

原创&#xff1a; MicroStrategy微策略中国 , Jiping Sun 微策略企业级数据分析与移动应用9月21日2018年 摘要&#xff1a;利用达析报告开箱即用的瀑布图来展示各个度量值如何增加或减少。下载MicroStrategy Desktop 10.11以上版本&#xff0c;自己动手创建瀑布图。 瀑布图是由…

日常开发中Git命令指北

Git基本操作 创建化仓库 mkdir 目录 cd 目录 git init配置本地仓库 # 配置用户名&#xff0c;邮箱 git config user.name "cxf" git config user.email "1969612859qq.com" # 查看本地配置&#xff08;小写的 L&#xff09; git config -l # 重置配置&a…

C语言函数详解(1)

目录 函数是什么 C语言中函数的分类 库函数 自定义函数 函数的参数 实际参数&#xff08;实参&#xff09; 形式参数&#xff08;形参&#xff09; 函数的调用 传值调用 传址调用 练习 函数的嵌套调用和链式访问 嵌套调用 链式访问 函数是什么 数学中我们常见到函…