当前位置:网站首页>leetcode-每日一题735. 行星碰撞(栈模拟)
leetcode-每日一题735. 行星碰撞(栈模拟)
2022-07-31 05:10:00 【lin钟一】
题目链接:https://leetcode.cn/problems/asteroid-collision/
思路
方法一、栈模拟
直接想法
用栈 st 来模拟行星碰撞,遍历 asteroids 数组,对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向,所以只有 st 的栈顶为正,当前 asteroids[i] 元素为负才会发生碰撞,且会一直取出栈顶元素为正的行星比较,直到比他小的正的行星碰完或者为同负的行星才结束
算法
- 从左往右遍历行星数组 asteroids
- 使用变量 alive 记录行星 aster 是否还存在(即未发生爆炸)
- 当 aster < 0 (行星方向向左) && alive == true(行星 aster 是否还存在) && len(st) > 0(栈st不为空) && st[len(st)-1] > 0((行星方向向右))
1)如果栈顶元素大于等于 −aster,则行星 aster 发生爆炸,将 alive 置为false
2)如果栈顶元素小于等于 −aster,则栈顶元素表示的行星发生爆炸,执行出栈操作
3)重复以上判断直到不满足条件,如果最后 alive 为真,说明行星 aster 不会爆炸,则将 aster 入栈
代码示例
func asteroidCollision(asteroids []int) (st []int) {
for _, aster := range asteroids{
alive := true
for alive && len(st) > 0 && aster < 0 && st[len(st) - 1] > 0{
alive = st[len(st)-1] < -aster // aster 是否存在
if st[len(st)-1] <= -aster {
// 栈顶行星爆炸
st = st[:len(st)-1]
}
}
if alive{
st = append(st, aster)
}
}
return
}
复杂度分析
时间复杂度:O(n),其中 n 为数组 asteroids 的大小。遍历数组 asteroids 总共需要O(n)的时间。
空间复杂度:O(1)。不需要申请额外的空间。
边栏推荐
猜你喜欢
第7章 网络层第2次练习题答案(第三版)
【数据库学习】Redis 解析器&&单线程&&模型
The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays
面试官:生成订单30分钟未支付,则自动取消,该怎么实现?
运用flask框架发送短信验证码的流程及具体代码
MySQL(更新中)
剑指offer基础版--- 第23天
剑指offer基础版 --- 第24天
剑指offer基础版 ----- 第28天
The interviewer asked me TCP three handshake and four wave, I really
随机推荐
Kubernetes 证书可用年限修改
Flink sink ES 写入 ES(带密码)
变量的解构赋值
C语言教程(二)-printf及c自带的数据类型
uni-app进阶之样式框架/生产环境【day10】
pytorch中的一维、二维、三维卷积操作
Input length must be multiple of 8 when decrypting with padded cipher
【C语言3个基本结构详解——顺序、选择、循环】
Why use Flink and how to get started with Flink?
梳理一下自己常用的快捷键
MySQL8.0.26安装配置教程(windows 64位)
The TOKEN value of Kubernetes joining the cluster expires
mysql 的简单运用命令
Data set partitioning and cross-validation
有了MVC,为什么还要DDD?
Object Detection Study Notes
剑指offer基础版 ----- 第28天
详解扫雷游戏(C语言)
10 【组件编码流程 组件自定义事件 全局事件总线】
Flask 的初识