LeetCode:剑指offer 09:用两个栈实现队列

vcs 覆盖率收集1——三种覆盖率类型、covergroup、bins、数据采样、覆盖率选项 介绍各种覆盖率,以及如何编写覆盖率收集的代码 阅读详情

problem

LeetCode 剑指offer 09:用两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

solution

方法一

思路过程

  • 明白栈和队列两种数据结构,栈先进后出,队列先进先出
  • 每一次添加元素,直接放在一个栈的后面
  • 每一次删除元素,把栈的元素pop放到另外一个栈中append,删除中转的栈的栈顶元素,再放回原来的栈中
  • 也可以每次添加元素,用另外一个栈配合放到栈底,每次删除元素就直接出栈,就是看你在来回换的时候放到什么函数中去实现

代码

python

class CQueue:

    def __init__(self):
        # temp作为临时调用的栈
        self.temp = []
        self.queue = []

    def appendTail(self, value: int) -> None:
        self.queue.append(value)

    def deleteHead(self) -> int:
        # 这里真的是傻了,for在in i 循环里面是变化的,就没了
        if self.queue:
            length = len(self.queue)
            for i in range(length):
                self.temp.append(self.queue.pop())
            res = self.temp.pop()
            for i in range(length - 1):
                self.queue.append(self.temp.pop())
            return res
        return -1

优化:

class CQueue:

    def __init__(self):
        # temp作为临时调用的栈
        self.temp = []
        self.queue = []

    def appendTail(self, value: int) -> None:
        self.queue.append(value)

    def deleteHead(self) -> int:
        if self.queue:
            while self.queue:
                self.temp.append(self.queue.pop())
            res = self.temp.pop()
            while self.temp:
                self.queue.append(self.temp.pop())
            return res
        return -1

方法二

思路过程

  • 参考这篇文章☞[双栈,一个负责入,一个负责出],写得很好(https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/solution/xiong-mao-shua-ti-python3-shuang-zhan-yi-ge-fu-ze-/)
    • 两个栈instack 和 outstack,一个用来添加元素,一个用来删除元素
    • 调用添加元素的函数时,直接放到instack 栈顶
    • 调用减少元素的函数时,查看outstack 是否有元素,如果有,就直接pop,没有就查看instack
    • instack有的话,把元素放入outstack,否则返回-1,
  • 这样就避免了每次增加或是删除元素的时候,都要把元素来回倒腾一次,做到了较好的优化,跑起来果然有很大的提升

代码

python

class CQueue:

    def __init__(self):
        self.instack=[]
        self.outstack=[]

    def appendTail(self, value: int) -> None:
        self.instack.append(value)

    def deleteHead(self) -> int:
        if self.outstack:
            return self.outstack.pop()
        if self.instack:
            while self.instack:
                self.outstack.append(self.instack.pop())
            return self.outstack.pop()
        return -1

mysql 学习笔记(1):mysql 基本概念和 mysql workbench 的基本使用方法 阅读详情

相关推荐

[特殊字符] 2026终极实战:Python爬取得物App球鞋实时交易价格 —— 从签名破解到数据可视化全指南

价格敏感度:热门鞋款(如Air Jordan 1、Yeezy 350、Dunk SB)价格每分钟都在波动,短线套利空间巨大。稀缺性:限量发售、联名款、地区限定,导致供需关系实时变化。数据壁垒:得物App使用自研WMS签名算法设备指纹绑定动态请求头加密,是爬虫工程师的“练兵场”。本博客将手把手带你从零搭建一套生产级得物球鞋价格爬虫系统,涵盖:抓包与逆向分析(mitmproxy + Frida)签名算法逆向(Python复刻)设备模拟与心跳保活(ADB + uiautomator2)

2201_76125261的博客 1068

剑指 Offer 09. 用两个实现队列

剑指 Offer 09. 用两个实现队列 题目描述: 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1] 示例二; 输入: ["CQueue","de

Hanfeige的博客 497

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

一、本文介绍 本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。MobileNet V4通过整合UIB、Mobile MQA以及优化的NAS策略,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中MNv4-Conv-S、MNv4-Conv-M、MNv4-Conv-L、MNv4-Hybrid-M和MNv4-Hybrid-L五种模型,以满足不同的需求。 模型 参数量 计算量 推理速度 YOLOv11m 20.0M 67.6GFLOPs 3.5ms

Limiiiing的博客 4394

LeetCode 剑指 Offer 09:用两个实现队列-队列

LeetCode 剑指 Offer 09:用两个实现队列-队列) 1、用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 思路: 1、维护两个,第一个支持插入操作,第二个支持删除操作。 2、根据先进后出的特性,我们每次往第一个里插入元素后,第一个的底部元素是最后插入的元素,第一个的顶部元素是下一个待删除的元素。 为了维

cui1004的博客 259

LeetCode 剑指 Offer 09. 用两个实现队列

时要先放进s1,然后s2要分情况,为空时直接入,不为空要先置空s1,再把s1的元素顺序入s2;还有就是删除队尾时,s1最上面删掉,s2底没法删,只能初始化后再把s1的元素再全入s2。如果出队列操作时,s1,s2都为空,就返回-1,如果s2为空,s1非空,就把元素倒入s2,s2的顶是最先进的元素,删掉即可。这里思路是一个进,一个出,里面的元素顺序很关键,要保持一个进最先进的元素在另一个出顶。入队列操作时,如果s2不为空,就把元素都放入s1,之后对s1入。首先初始化就是new就可以。

qq_39167720的博客 572

leetcode 剑指offer 面试题09. 用两个实现队列

题干: 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )。 示例 1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1] 示例 2: 输入: ["CQueue","deleteHead","appendTai

weixin_43978936的博客 319

9. 用两个实现队列

文章目录剑指offer 09两个实现队列解题思路解法一解法二第九题扩展题1 用实现队列 LeetCode232232. 用实现队列解题思路解法一解法二第九题扩展题2 用两个队列实现 LeetCode225225. 用队列实现解题思路小结 剑指offer 09两个实现队列两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回

YouMing_Li的博客 1255

剑指 Offer 09. 用两个实现队列 - 力扣(LeetCode

剑指 Offer 09. 用两个实现队列 - 力扣(LeetCode

Onwaier的博客 550

#力扣 LeetCode剑指 Offer 09. 用两个实现队列 @FDDLC

题目描述: 剑指 Offer 09. 用两个实现队列 - 力扣(LeetCode) (leetcode-cn.com) 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 ) 示例 1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输..

LiuXingchang的博客 394

LeetCode力扣练习》剑指 Offer 09. 用两个实现队列 Java

LeetCode力扣练习》剑指 Offer 09. 用两个实现队列 Java 一、资源 题目: 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3

XRT_knives的博客 176

LeetCode 剑指offer 09.用两个实现队列

两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )这道题很简单,主要理解队列的区别,注意细节就可以。

编程技术, 日益精进 335

leetcode的python实现--剑指offer 09两个实现队列

剑指 Offer 09. 用两个实现队列 题目描述 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1] 示例 2: 输入: [“CQueue”,“d

wu2020的博客 4027

LeetCode剑指 Offer 09. 用两个实现队列

两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1] 示例 2: 输入: ["CQueue","deleteHead","appendTail",

RainBowAndU的博客 222

LeetCode 剑指 Offer 09. 用两个实现队列 | Python

两个实现队列

"大梦三千秋的博客 960

力扣:剑指Offer09题 用两个实现队列 & 232题 用实现队列

题目 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 例1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1] 例2: 输入: ["CQueue","deleteHead","appendTail","ap

看不见鲸鱼的鼻子的博客 265

LeetCode剑指 Offer 09. 用两个实现队列

剑指 Offer 09. 用两个实现队列

2022年毕业的萌新程序猿,输出一下自己的学习内容~ 154

Leetcode刷题笔记——剑指 Offer 09. 用两个实现队列(简单)

Leetcode刷题笔记——剑指 Offer 09. 用两个实现队列(简单)题目描述方法一复杂度分析C++代码总结参考链接 题目描述 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]]

weixin_39739042的博客 238

LeetCode | 面试题09. 用两个实现队列剑指Offer】【Python】

LeetCode 面试题09. 用两个实现队列剑指Offer】【Easy】【Python】【】【队列

Wonz 825

LeetCode剑指 Offer 09. 用两个实现队列(Java)

LeetCode剑指 Offer 09. 用两个实现队列(Java),用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1。本文讲解实现思路和提供代码参考。

渣渣的夏天 525

LeetCode-剑指 Offer 09. 用两个实现队列

LeetCode-剑指 Offer 09. 用两个实现队列1. 问题描述2. 解析2.1 2.2 队列3. 参考答案 原文地址:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/ 1. 问题描述 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返

Jack魏 836

leetcode 剑指Offer 09.用两个实现队列 Java

两个实现队列题目链接描述示例代码 题目链接 https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/ 描述 用两个实现一个队列队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部 插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 提示: 1 <= values <= 10000 最多会对 appe

博主是个二次元死肥宅~ 298

ImageNet-数据集

ImageNet is provided by Standford University.本数据集由斯坦福大学提供。 imagenet_ILSVRC2017_datasets.zip

claude-code 官方源码 基于source-map还原的代码

【Claude Code官方源码|解锁顶级Agent与上下文工程核心架构】获取原厂释放的生产级AI系统完整实现!这份官方源码为您深度揭示:• 企业级Agent推理框架与思维链控制机制• 工业级上下文工程实现与长上下文优化技术• 多模态任务处理与工具调用完整架构专为AI架构师和智能体研发团队打造,包含:上下文记忆管理与企业级状态维护思维链推理与复杂任务分解实现生产级API设计与扩展接口唯一公开的企业级Agent完整参考实现,涵盖从上下文理解到行动执行的完整技术链。正版授权,深度可定制。立即获取,掌握下一代AI智能体的核心奥秘!(官方源码交付,Agent与上下文工程学习的终极指南)

上一篇: LeetCode:297 Serialize and Deseialize Binary Tree
下一篇: LeetCode:23 Merge k Sorted Lists
erzhuerzhu
博客等级 码龄8年 11粉丝 94原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值