leetcode刷题(5)

news2025/1/20 1:55:10

各位朋友们,大家好,今天是我leedcode刷题的第五篇,我们一起来看看吧。

文章目录

  • 栈的压入,弹出序列
    • 题目要求
    • 用例输入
    • 提示
    • 做题思路
    • 代码实现
      • C语言代码实现
      • Java代码实现
  • 最小栈
    • 题目要求
    • 用例输入
    • 提示
    • 做题思路
    • 代码实现
      • Java代码实现

栈的压入,弹出序列

leetcode之栈的压入与弹出序列(难度:中等)

题目要求

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

用例输入

示例 1:
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:
输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。

提示

0 <= pushed.length == popped.length <= 1000
0 <= pushed[i], popped[i] < 1000
pushed 是 popped 的排列。

做题思路

我们来分别遍历这两个数组,遍历的同时先将pushed数组压入栈中,然后我们判断栈顶的数据是否跟popped数组的数据相等,如果相等就出栈,popped数组的下标+1,不相等我们就继续将pushed数组中的数据压入栈中,循环中这个数组,最后如果栈中为空则说明popped序列是pushed数组的弹出序列,不为空则不是。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
此时栈顶的数据等于popped[j],所以我们弹出栈顶的数据,并且将j++;
在这里插入图片描述
在这里插入图片描述
栈顶数据等于popped[j],继续弹出。
在这里插入图片描述
继续该操作
在这里插入图片描述
栈里面为空,所以我们返回true。

代码实现

C语言代码实现

bool validateStackSequences(int* pushed, int pushedSize, int* popped, int poppedSize){
    int* arr = (int*)malloc(pushedSize*sizeof(int));
    int tail = 0;
    int j = 0;
    for(int i = 0; i<pushedSize; i++)
    {
        arr[tail] = pushed[i];
        while(j<poppedSize && tail>=0 && arr[tail] == popped[j])
        {
            tail--;
            j++;
        }
        tail++;
    }
    return tail==0;
}

在这里插入图片描述

Java代码实现

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Stack<Integer> stack = new Stack<>();
        int j = 0;
        for(int i = 0; i<pushed.length; i++) {
            stack.push(pushed[i]);
            while( j<popped.length && !stack.empty()  && stack.peek().equals(popped[j])) {
                stack.pop();
                j++;
            }
        }
        return stack.empty();
    }
}

在这里插入图片描述

最小栈

leetcode之最小栈(难度:中等)

题目要求

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。

这是一幕提供的接口

class MinStack {

    public MinStack() {

    }
    
    public void push(int val) {

    }
    
    public void pop() {

    }
    
    public int top() {

    }
    
    public int getMin() {

    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

用例输入

示例 1:

输入:
[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

提示

-231 <= val <= 231 - 1
pop、top 和 getMin 操作总是在 非空栈 上调用
push, pop, top, and getMin最多被调用 3 * 104 次

做题思路

这个题目需要我们使用两个栈,一个栈用来放所有整数,一个的栈顶存放的是最小的整数,叫做最小栈。当我们入栈的时候,当第一次入栈的时候因为最小栈里面是空的,所以我们直接将数据压入栈中,后来入最小栈的时候,我们就需要判断需要入栈的这个数据是否小于最小栈栈顶的数据,如果小于或等于就入栈,否则不入栈。当我们出栈的时候我们还需要对最小栈做出变化,当我们出栈的这个数等于最小栈的栈顶的数据,我们也将最小栈栈顶的数据弹出。后面的返回栈顶的数据,跟栈中的最小值我就不多叙述了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重复此操作
在这里插入图片描述
然后我们在弹出三次栈

弹出的7不等于MinStack栈顶的-1
在这里插入图片描述
-1等于MinStack栈顶的-1,所以MinStack也需要弹出
在这里插入图片描述

在这里插入图片描述

代码实现

因为这道题用C语言实现较复杂,所以我们这个题就直接用Java来实现。

Java代码实现

class MinStack {

    private Stack<Integer> stack;
    private Stack<Integer> minstack;
    public MinStack() {
        stack = new Stack<>();
        minstack = new Stack<>();
    }

    public void push(int val) {
        stack.push(val);
        if(minstack.empty()) {
            minstack.push(val);
        } else {
            if(val <= minstack.peek()) {
                minstack.push(val);
            }
        }
    }

    public void pop() {
    //判断栈是否为空
        if(!stack.empty()) {
        这里我们用Integer防止取出的数据不在-128~127之间
            Integer val = stack.peek();
            stack.pop();
            if(val.equals(minstack.peek())) {
                minstack.pop();
            }
        }
    }

    public int top() {
        if(!stack.empty()) {
            return stack.peek();
        }
        return -1;
    }

    public int getMin() {
        if(!minstack.empty()) {
            return minstack.peek();
        }
        return -1;
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

![在这里插入图片描述](https://img-blog.csdnimg.cn/68c1b0bcc5eb4a3aa488846e7d16af76.pn

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

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

相关文章

QML自定义模块及qmldir的使用

前言 在开发QtQuick项目中&#xff0c;当项目文件很多的情况下&#xff0c;可能会分成多级文件夹来进行分类&#xff0c;还有一些通用类型文件&#xff0c;如公共组件&#xff0c;通用配置等等&#xff0c;需要在各个不同的文件中进行调用&#xff0c;这种情况下&#xff0c;一…

04、Cadence使用记录之器件连接的连线、网络、总线、差分(OrCAD Capture CIS)

04、Cadence使用记录之器件连接的连线、页内网络、总线、跨页网络、差分、电源&#xff08;OrCAD Capture CIS原理图&#xff09; 前置教程&#xff1a; 01、Cadence使用记录之新建工程与基础操作&#xff08;原理图绘制&#xff1a;OrCAD Capture CIS&#xff09; 02、Cadenc…

操作系统原理 —— 操作系统的四个特征:并发、共享、虚拟、异步 (二)

本章我们来聊一下操作系统的四个特征 在我们的操作系统中有四个特征&#xff1a;并发、共享、虚拟、异步&#xff0c;我们结合每一个特征来进行讲解&#xff0c;我们先来看并发。 并发 这里所说的并发&#xff0c;最好不联想到并发编程。咱们就简简单单理解一下&#xff0c;…

浙工商机器学习课程论文+代码分享(含数据集)

文章目录 一、论文总览二、摘要 & 目录三、数据集的展示四、部分代码4.1 降低内存4.2 部分特征生成4.3 热力图分析4.4 变量分布图4.5 聚类算法4.6 聚类结果的展示&#xff08;部分&#xff09;4.7 聚类后的特征图 完整版的论文代码数据集地址&#xff1a; https://mbd.pub…

leetcode刷题(7)二叉树(1)

哈喽大家好&#xff0c;这是我leetcode刷题的第七篇&#xff0c;这两天我将更新leetcode上关于二叉树方面的题目&#xff0c;如果大家对这方面感兴趣的话&#xff0c;欢迎大家持续关注&#xff0c;谢谢大家。 那么我们就进入今天的主题。 文章目录 1.二叉树的前序遍历题目要求示…

优先级队列

目录 前言&#xff1a; 1、PriorityQueue的特性 .2 PriorityQueue常用接口介绍 Ⅰ、PriorityQueue常见的构造方法 Ⅱ、常用的方法 Ⅲ、PriorityQueue的扩容方式&#xff1a; 3、应用 前言&#xff1a; 普通的队列是一种 先进先出的数据结构&#xff0c;元素在队列尾追加&am…

RC专题:无源滤波电路和有源滤波电路

什么是无源滤波电路和有源滤波电路 仅由无源器件&#xff08;电阻、电容、电感&#xff09;构成的滤波电路 称为无源滤波电路。如下图所示。 由无源器件和有源器件&#xff08;双极型管&#xff0c;单极型管&#xff0c;集成运放&#xff09;构成的滤波电路 称为有源滤波电路。…

什么是爬虫?

网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟…

2023第十三届MathorCup高校数学建模挑战赛C题解析

2023第十三届MathorCup高校数学建模挑战赛C题解析 题目解析前言题目一题目二题目三题目四 题目 C 题 电商物流网络包裹应急调运与结构优化问题 电商物流网络由物流场地&#xff08;接货仓、分拣中心、营业部等&#xff09;和物流场地之间的运输线路组成&#xff0c;如图 1 所示…

LeetCode:1. 两数之和——哈希表~

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;1. 两数之和 题目描述&#xff1a;给定一个整数数组nums 和一个整数目…

QT 插件通信接口调用 CTK开发(四)

CTK 为支持生物医学图像计算的公共开发包,其全称为 Common Toolkit。为医学成像提供一组统一的基本功能;促进代码和数据的交互及结合;避免重复开发;在工具包(医学成像)范围内不断扩展到新任务,而不会增加现有任务的负担;整合并适应成功的解决方案。 本专栏文章较为全面…

leetcode python刷题记录(十)(91~100)

leetcode python刷题记录&#xff08;十&#xff09;&#xff08;91~100&#xff09; 91. 解码方法 class Solution:def numDecodings(self, s: str) -> int:if not s or s[0]0:return 0nlen(s)dp[0]*(n1)dp[0]1dp[1]1for i in range(1,n):if s[i]0:if s[i-1]1 or s[i-1]2:…

【算法系列之二叉树I】leetcode226.翻转二叉树

非递归实现前序遍历 力扣题目链接 解决思路 前序遍历&#xff0c;中左右。先放右节点&#xff0c;后放左节点。 Java实现 class Solution {public List<Integer> preorderTraversal(TreeNode root) {//中左右Stack<TreeNode> stack new Stack<>();List…

蓝桥杯:人物相关性分析

蓝桥杯&#xff1a;人物相关性分析https://www.lanqiao.cn/problems/198/learning/ 目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 输入 输出 运行限制 题目分析:(滑动窗口) AC代码&#xff08;JAVA&#xff09; 题目描述 小明正在分析一本小说中…

【ChatGPT】无需魔法打开即用的 AI 工具集锦

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

原理+配置+实战,Canal一套带走

前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——Canal。在了解了它的工作原理和使用场景后&#xff0c;顿时产生了浓厚的兴趣。今天&#xff0c;就让我们跟随阿Q的脚步&#xff0c;一起来揭开它神秘的面纱吧。 简介 canal 翻译为管道&#xff0c;主要用途是基于 M…

【设计】【Redis】分布式限流与算法实现

目录 前言实现application.propertiesconfig.RedisConfigMainApplicationcontroller.TrafficLimitControlleraop.AccessLimiterAspectaop.annotation.AccessLimiter 项目结构运行限流脚本计数器滑动窗口令牌桶漏桶 参考资料 前言 服务的某些场景可能会出现短时间内的巨大访问流…

【C语言进阶:动态内存管理】柔性数组

本节重点内容&#xff1a; 柔性数组的特点柔性数组的使用柔性数组的优势 ⚡柔性数组 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。C99 中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c…

java+ssm 社区超市网上商城果蔬(水果蔬菜)管理系统

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括超市果蔬管理系统的网络应用&#xff0c;在外国超市果蔬管理系统已经是很普遍的方式&#xff0c;不过国内的超市果蔬管理系统可能还处于起步阶段。超市果蔬管理系统具有果蔬管…

Flutter系列(八)搜索框详解

底部导航顶部导航图片列表的完整代码 Flutter系列&#xff08;四&#xff09;底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 目录 一、前言 二、搜索框实现方案 三、完整工程代码 1. 自定义的搜索框组件SearchAppBar search.dart 2. 搜索详情页 search…