大厂常见算法50题-最小栈

请添加图片描述

专栏持续更新50道算法题,都是大厂高频算法题,建议关注, 一起巧‘背’算法!

文章目录

  • 题目
  • 解法一 遍历找最小值(不要求时间复杂度情况下)
  • 解法二 辅助栈
  • 总结

题目

image.png

解法一 遍历找最小值(不要求时间复杂度情况下)

此种解法不满足时间复杂度为O(1)的要求,在不要求时间复杂度的情况下,可以使用该方法。我第一次刷的想法是:

  1. push,pop使用LinkedList的push,pop方法
  2. 最小值使用Stream流得到最小值
  3. 栈头元素使用现成的方法
class MinStack {private LinkedList linkedList;public MinStack() {linkedList = new LinkedList<>();}public void push(int x) {linkedList.push(x);}public void pop() {linkedList.pop();}public int top() {return (int)linkedList.getFirst();}public int min() {return (int)linkedList.stream().filter(e -> e!=null).min(Comparator.naturalOrder()).orElse(null);}
}

解法二 辅助栈

由于时间复杂度需要为O(1),那么思路就是要把最小值存起来,获取的时候直接取。这里采用辅助栈,把最小的值放到第二栈的栈顶,使用peek方法取栈顶元素即可。当然这就需要push跟pop方法添加元素时做下处理,在添加时,如果新元素小于辅助栈的栈顶元素,就把新元素压入辅助栈。

Stack类实际开发中不常用,简单介绍下。Stack类是一个基于数组或链表实现的后进先出(LIFO, Last In First Out)数据结构。peek方法是Stack类中定义的一个方法,它的作用是:

  1. 不删除栈顶元素,而是返回栈顶元素的值。
  2. 这个操作允许用户查看栈顶的元素,而不会改变栈的状态。也就是说,栈顶元素仍然是栈顶元素,后续的操作如pop才会移除它。
class MinStack {private Stack<Integer> stack1;private Stack<Integer> stack2;public MinStack() {stack1 = new Stack<>();stack2 = new Stack<>();}public void push(int x) {stack1.add(x);if (stack2.isEmpty() || stack2.peek() >= x) {stack2.add(x);}}public void pop() {if (stack1.pop().equals(stack2.peek())) {stack2.pop();}}public int top() {return stack1.peek();}public int min() {return stack2.peek();}
}

总结

与之前的算法题一样,新手刷这道题也是一脸懵逼,可能有些科班出身的都不知道如何计算时间复杂度。我的建议是先记忆一下题解的思路,先把思路记住,自己能按着思路不看题解写出来就够了。然后再去补时间复杂度等算法基础概念。
请添加图片描述

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

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

相关文章

艾体宝方案 | 加密USB金融解决方案

在现代金融行业中&#xff0c;保护敏感数据和合规性已成为至关重要的任务。为了帮助金融公司应对移动性风险和合规挑战&#xff0c;我们提供了一种高效的加密USB解决方案。 一、为什么金融公司需要加密USB解决方案 1、降低移动性风险 金融服务公司正在迅速过渡到一种模式&a…

《深入理解kafka-核心设计与实践原理》

本文是对于《深入理解kafka-核心设计与实践原理》的笔记和提纲整理 主要用于复习和知识点快速复习 第一章&#xff1a;概念 链接&#xff1a;《深入理解kafka-核心设计与实践原理》第一章&#xff1a;概念 第一章&#xff1a;概念 [1.1] 基本概念 [1.1.1] 基本角色与概念[1.1.…

教程分享:如何为跨境电商、外贸、国际展会制作二维码?

不论是做跨境电商、在全球做产品推广&#xff0c;还是国外的餐厅运营、参加国际展会&#xff0c;或者是做创意户外广告、制作个性化的个人名片、有趣的产品包装……只要是在国外使用二维码&#xff0c;你都可以在QR Tiger去制作您需要的二维码&#xff01; 一、认识QR Tiger 二…

SpringBoot+Redission实现排行榜功能

SpringBootRedission实现排行榜功能 demo地址&#xff1a;ranking-demo: 排行榜DEMO (gitee.com) 一、业务需求 实现一个排行榜&#xff0c;要求按照分数和达成这个分数的时间排序&#xff0c;即相同分数下&#xff0c;时间早的在上面 二、Redis中的zSet(有序集合) 1.简介 …

Flutter 中的 @immutable:深入解析与最佳实践

在 Flutter 开发中&#xff0c;immutable 注释扮演着至关重要的角色&#xff0c;用于标记不可变类。不可变类顾名思义&#xff0c;其状态一旦创建便不可更改&#xff0c;这与可变类截然不同。后者允许在创建后对实例进行修改。 immutable 的利好 引入不可变类可以带来诸多优势…

GO日志打印添加goroutineid

今天想给日志添加一个前缀&#xff0c;以区分不同goroutine的日志&#xff0c;方便做并发问题的排查&#xff0c;做日志跟踪。 为了解决goroutineid&#xff0c;网上各出奇招&#xff0c;有的使用runtime包未公开的方法获取&#xff1a; func Goid() int {defer func() {if e…

如何在Windows 11中查找产品密钥?这里提供两种办法

Windows 11使用产品密钥来确保你的操作系统是正版的,换句话说,不是盗版的。你可以在你的电脑上找到正在使用的产品密钥,如果你自己购买了Windows并需要重新安装,该密钥特别有用。 什么是Windows产品密钥 产品密钥是微软确保所使用的Windows副本是正版的方法。当激活Windo…

docker容器 怎么查看运行日志

在Docker中&#xff0c;查看容器的运行日志可以使用docker logs命令。该命令允许你获取容器的日志输出&#xff0c;这对于调试和监控容器的状态非常有用。 以下是docker logs命令的一些常用用法&#xff1a; 基本用法 docker logs [OPTIONS] CONTAINERCONTAINER 是容器的ID或…

【Pytorch】3.Transforms的运用

什么是Transforms 在PyTorch中&#xff0c;transforms是用于对数据进行预处理、增强和变换的操作集合。transforms通常用于数据载入和训练过程中&#xff0c;可以包括数据的归一化、裁剪、翻转、旋转、缩放等操作&#xff0c;以及将数据转换成PyTorch可以处理的Tensor格式。 Tr…

leetcode---岛屿数量

. - 力扣&#xff08;LeetCode&#xff09; 代码&#xff1a; //岛屿题目的思想&#xff1a;二维矩阵图的DFS就是&#xff0c;上下左右遍历如果是0或者出界的话就return //规定的是陆地上下左右是水的话它就是岛屿。当遍历矩阵图中每一个点&#xff0c; //在调用递归算法之前…

高频次的低价监测如何实现

品牌在做控价的过程中&#xff0c;需要对渠道中的低价数据进行监测&#xff0c;但价格数据变化快&#xff0c;涉及的促销信息也很多&#xff0c;如何将这些变化的数据监测到位&#xff0c;同时对于低价的凭证还要截图留证&#xff0c;以便有效的进行渠道治理&#xff0c;这就需…

【redis】redis持久化分析

目录 持久化Redis持久化redis持久化的方式持久化策略的设置1. RDB&#xff08;快照&#xff09;fork(多进程)RDB配置触发RDB备份自动备份手动执行命令备份&#xff08;save | bgsave&#xff09;flushall命令主从同步触发动态停止RDB RDB 文件恢复验证 RDB 文件是否被加载 RDB …

【海豚调度 开机启动】dophischeduler 如何开启开机自启动功能

DolphinScheduler 是一个分布式、去中心化的大数据工作流调度系统&#xff0c;支持大数据任务调度。若要设置 DolphinScheduler 开机自启动&#xff0c;通常需要将其配置为系统服务。以下是一般步骤&#xff0c;具体操作可能因操作系统的不同而有所差异&#xff1a; 在 Linux …

AI大模型探索之路-训练篇16:大语言模型预训练-微调技术之LoRA

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

图像处理(二)

图像处理&#xff08;2&#xff09; 裁剪图片 from skimage import io,dataiimg io.imread(rD:\工坊\图像处理\十个勤天2.png)roiiimg[50:150,120:200,:]io.imshow(roi) 运行结果&#xff1a; 将图片进行二值化 from skimage import io,data,colorimg io.imread(r"…

影响项目成功的六个“致命”错误

项目经理作为项目的负责人&#xff0c;肩负着巨大的责任和挑战。他们需要具备专业知识、出色的综合管理能力以及敏锐的洞察力&#xff0c;以便在项目执行过程中及时关注项目动态&#xff0c;处理好各种问题&#xff0c;并避免那些可能影响项目实施的致命错误。 一、缺乏明确的…

基于Netty的websocket的简单介绍

1、websocket简介 「WebSocket」是一种在单个TCP连接上进行全双工通信的协议。 「WebSocket」使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在「WebSocket API」中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两…

羊大师解析,鲜为人知的羊奶冷知识

羊大师解析&#xff0c;鲜为人知的羊奶冷知识 羊奶的脂肪球更小&#xff1a;相较于牛奶&#xff0c;羊奶中的脂肪球直径更小&#xff0c;这有助于其更快地被人体消化和吸收。 羊奶含有更多的中链脂肪酸&#xff1a;羊奶中含有较多的中链脂肪酸&#xff08;MCT&#xff09;&am…

5个好用AI绘画工具,让你秒变艺术家!

AI绘画现在可谓是相当火爆&#xff0c;各种AI绘画工具如雨后春笋般涌出。很多人想自己尝试用AI来创作&#xff0c;却不知道使用什么工具&#xff0c;今天就给大家分享5个好用AI绘画工具&#xff0c;有的只需一段文字便可生成一幅美轮美奂的大作&#xff0c;让你秒变艺术家&…

Spring Cloud Stream的作用和用法

Spring Cloud Stream是一个用于构建消息驱动型微服务的框架&#xff0c;它在Spring Cloud生态系统中扮演着关键角色。以下是关于Spring Cloud Stream的作用和用法的详细描述&#xff1a; 一、作用 简化消息中间件集成&#xff1a;Spring Cloud Stream旨在简化和统一消息中间件…