数据结构与算法之栈: LeetCode 03.05. 栈排序 (Ts版)

具身智能工程师的硬核知识骨架:C++、Linux、离散数学与信号系统 具身智能是AI与物理世界深度耦合的交叉领域,其核心在于实时性、确定性与物理可执行性。它并非单纯依赖大模型或机器人外壳,而是建立在底层系统能力之上:C++提供内存与时序的绝对控制力,Linux承担实时调度与硬件抽象的神经中枢角色,离散数学支撑状态机建模与多智能体协同逻辑,信号与系统则是传感器数据处理与噪声抑制的理论根基。这四者共同构成从感知、决策到执行的完整闭环能力链。本文聚焦真实产线与实验室验证的工程实践路径,覆盖毫秒级控制循环实现、PREEMPT_RT内核调优、机器人动作状态建模、IMU卡尔曼滤波落地等关 阅读详情

03.05. 栈排序

描述

  • 栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。

示例 1

 输入:
["SortedStack", "push", "push", "peek", "pop", "peek"]
[[], [1], [2], [], [], []]
 输出:
[null,null,null,1,null,2]

示例 2

 输入: 
["SortedStack", "pop", "pop", "push", "pop", "isEmpty"]
[[], [], [], [1], [], []]
 输出:
[null,null,null,null,null,true]

提示

  • 栈中的元素数目在[0, 5000]范围内

Typescript 版算法实现


1 ) 方案1:栈和辅助栈

class SortedStack {
    private stk1: number[] = [];
    private stk2: number[] = [];

    constructor() {}

    // 插入元素时保持栈的排序
    push(val: number): void {
        // 将所有比 val 大的元素从 stk1 移动到 stk2
        while (this.stk1.length > 0 && this.stk1[this.stk1.length - 1] < val) {
            this.stk2.push(this.stk1.pop()!);
        }
        // 将新元素插入 stk1
        this.stk1.push(val);
        // 将 stk2 中的元素移回 stk1
        while (this.stk2.length > 0) {
            this.stk1.push(this.stk2.pop()!);
        }
    }

    // 弹出栈顶元素
    pop(): void {
        if (!this.isEmpty()) {
            this.stk1.pop();
        }
    }

    // 获取栈顶元素
    peek(): number {
        if (this.isEmpty()) {
            return -1;
        } else {
            return this.stk1[this.stk1.length - 1];
        }
    }

    // 检查栈是否为空
    isEmpty(): boolean {
        return this.stk1.length === 0;
    }
}

/**
 * Your SortedStack object will be instantiated and called as such:
 * var obj = new SortedStack()
 * obj.push(val)
 * obj.pop()
 * var param_3 = obj.peek()
 * var param_4 = obj.isEmpty()
 */

2 )方案2:基于 栈排序

class SortedStack {
    private stk: number[] = [];
    
    // 插入元素时保持栈的排序
    push(val: number): void {
        let tempStack: number[] = [];
        
        // 将所有比 val 大的元素从 stk 移动到 tempStack
        while (this.stk.length > 0 && this.stk[this.stk.length - 1] < val) {
            tempStack.push(this.stk.pop()!);
        }
        
        // 将新元素插入 stk
        this.stk.push(val);
        
        // 将 tempStack 中的元素移回 stk
        while (tempStack.length > 0) {
            this.stk.push(tempStack.pop()!);
        }
    }

    // 弹出栈顶元素
    pop(): void {
        if (!this.isEmpty()) {
            this.stk.pop();
        }
    }

    // 获取栈顶元素
    peek(): number {
        if (this.isEmpty()) {
            return -1;
        } else {
            return this.stk[this.stk.length - 1];
        }
    }

    // 检查栈是否为空
    isEmpty(): boolean {
        return this.stk.length === 0;
    }

    // 返回排序后的栈
    sort(): number[] {
        const result: number[] = [];
        while (this.stk.length > 0) {
            result.push(this.stk.pop()!);
        }
        return result.reverse(); // 反转结果以保持升序
    }
}


/**
 * Your SortedStack object will be instantiated and called as such:
 * var obj = new SortedStack()
 * obj.push(val)
 * obj.pop()
 * var param_3 = obj.peek()
 * var param_4 = obj.isEmpty()
 */
生产级多维聚合:7种Pandas实战模式解决银行数据对账难题 多维聚合是将原始交易、行为、风控等宽表数据转化为业务指标的核心技术,其本质是按维度切分、对指标施加统计逻辑并保障结果可解释性。它不同于简单groupby求和,需兼顾空值处理、时间窗口对齐、多指标并行计算与业务规则嵌入。在金融场景中,聚合结果直接影响财务核对、风险预警与监管报送,0.3%的偏差可能源于未处理的NULL或滚动窗口错位。本文聚焦Pandas中七类高复用聚合模式——多指标并行agg、自定义函数封装、滚动窗口(rolling)、扩展窗口(expanding)、多级透视(unstack)、条件聚合与端到 阅读详情

相关推荐

GLM-5.1登顶SWE-Bench Pro:开源代码大模型的工程化跃迁

代码大模型正从算法Demo走向真实软件工程交付,其核心能力已超越传统编程题求解,转向上下文缝合、跨文件推理与合规性生成等高阶任务。SWE-Bench Pro作为当前最严苛的软件工程评估基准,不再考察单点编码技巧,而是检验模型对AST语法结构、控制流约束及生产环境依赖链的理解深度。GLM-5.1通过多粒度代码表征融合与动态语义窗口机制,在真实GitHub Issue修复、PR评审辅助等场景实现质的突破;其全量开源策略(含权重、训练脚本与sweprobe评测框架)更首次支撑企业级可复现、可审计、可集成的代码助手

weixin_30326515的博客 414

doocs/leetcode 题解深剖:面试题 03.05 栈排序(Sort of Stacks)——辅助栈实现“最小元素永远在栈顶“

本篇技术指南以 doocs/leetcode 仓库中 [《程序员面试金典(第 6 版)》系列题解](https://link.gitcode.com/i/d54f21a93f6cca7abf88651351fe302e) 的 [面试题 03.05 栈排序](https://link.gitcode.com/i/088af2cbef1e0f8f3d61e103a94b67a7) 为核心,讲解如何仅用

gitblog_00376的博客 998

Claude Opus 4.7真实能力边界:单函数补全强,跨文件推理弱

AI编程助手的核心价值不在于‘生成代码’,而在于降低软件系统的认知熵值——即提升上下文感知精度、变更影响预测能力和防御式编码内化程度。当前主流大模型如Claude Opus 4.7在单函数级代码补全(如异常处理分支补全)上已具备较高稳定性,响应延迟优化显著;但在跨文件依赖推理(如DAO层变更需同步更新Service/Controller)和状态一致性维护(如分布式锁续期、多端状态同步)等工程关键场景中,仍存在建模局限与错误率反弹。其本质是模型对‘软件工程上下文’的抽象能力不足,而非算力或数据缺陷。因此,真实

stevenbill的博客 374

程序员面试金典 LCCI 题解全导航:doocs/leetcode 仓库 110 道编程面试题多语言实现指南

《程序员面试金典(第 6 版)》(Cracking the Coding Interview, 6th Edition)是面向 IT 名企技术面试的经典备考书,而本仓库 `lcci/` 目录以该书为蓝本,精选 100+ 道高频编程面试题,每道题均提供从题目描述、解题思路到多语言源码实现的完整闭环。本文将带你系统梳理该专题的目录结构与数据组织方式,完整列出全部题解索引(含题号、题解链接、标签与难度)

gitblog_01091的博客 197

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1278

【仿真】Carla Python API实战:从零搭建自动驾驶测试环境

本文详细介绍了如何使用Carla Python API从零搭建自动驾驶测试环境。通过Carla仿真平台,开发者可以构建高度逼真的城市环境和车辆物理模型,利用Python API实现传感器配置、数据采集、场景构建及自动驾驶算法集成。文章还分享了实际项目中的调试技巧和性能优化经验,帮助读者快速掌握自动驾驶仿真测试的核心技术。

weixin_29050513的博客 217

KMS_VL_ALL_AIO 完整教程:一条命令激活 Windows 11 与 Office 2024,每周自动续期

重装完 Windows,桌面右下角"激活 Windows"的水印去不掉,打开 Office 又提示授权无效。单文件脚本 KMS_VL_ALL_AIO 一次运行就能完成 Windows 11 和 Office 2024 的 KMS 激活,之后按周自动续期,不用找密钥、不用记到期时间。 ## 60 秒上手:从克隆到激活完成 1. 命令行执行 `git clone https://gitcode.c

gitblog_00518的博客 225

滤波器初步入门(非常全面)

主要关注的是-3dB这个点,-3dB就是截止频率所对应的点,我们把功率降至50%以下的信号定义为被衰减掉了(但要跟实际情况相结合,有些信号衰减-3db不够,需要衰减更多)-3dB这个点对应我们的电压来说是0.707。设计电路可以留一定的余量,如果你把4k设计为截止频率,那么4k时候衰减倍数为-3dB通常是不够的,你可以将截止频率设为2k,那么4k的衰减就可以达到15dB(假设),根据自己的需要去设计对应的截止频率。理想的滤波器是当输入的信号频率大于截止频率时,大于部分的频率对应的电压信号直接归0。

yybyybds的博客 5720

如何用 Docker 5 分钟一键跑通 PDF 中文翻译服务:从零到可用的完整指南

使用 zotero-pdf2zh(Zotero PDF 中文翻译插件)的前提是先跑起本地翻译服务 [server/server.py](https://link.gitcode.com/i/f4c074e3ac30cd7894b9a67f5263b05c),而它依赖的 Python 环境包多、手工配置繁琐,正是新手最容易卡住的地方。用 Docker 部署则把环境和依赖全部打进镜像:下载 2 个配置

gitblog_00476的博客 354

【基于51】红外寻迹智能小车 - 代码篇

这是一个基于C51单片机的红外巡线智能小车,是一个适合嵌入式单片机、C语言初学者练习的小Demo,文章提供完整的项目思路、免费的源代码。

ZER00000001的博客 3万+

S32K144之芯片锁死解锁——关闭debug端口

S32K144之芯片锁死及解锁 经常捣鼓单片机就会发现,时常会因为某些操作不当导致芯片锁死情况的发生,通过Jlink我们可以读到芯片的ID,但是无法进行Debug,这很是让人苦恼。 基于S32K144的芯片锁死,一般有如下几种可能: 1、时钟配置异常,过高的配置时钟频率以及不配置时钟,都有可能造成芯片保护锁死,我就曾经因为不注意把时钟配置代码注释掉,导致芯片锁死。 2、我是微软雅黑烧写断电,如果在...

weixin_41935674的博客 1万+

Overleaf 协作功能完整指南:评论、批注与版本对比是怎么做到的

晚上十一点,导师在群里 @你:“论文有三处批注,看完改一下。”你打开项目,发现合著者正在改的正是你准备动笔的那一段。两个人同时敲同一份 .tex 文件,谁也不许掉线——这就是多人 LaTeX 协作写作的日常。Overleaf 协作功能(评论、批注修订、版本对比)就是为这种场景准备的:它把“抢一个文件”变成有分工、有留痕、可回头的流程。 ## Overleaf 协作到底包含什么 一句话:Over

gitblog_01035的博客 1079

Cocos Creator 2.4 APK逆向实战:如何完整提取游戏资源并还原工程(附工具包)

本文详细介绍了针对Cocos Creator 2.4打包的APK进行逆向工程的完整流程,包括环境搭建、资源索引解析、打包文件提取、图集拆分以及工程结构还原。重点讲解了如何利用config.json和.jsb文件完整提取游戏资源,并生成可被Cocos Creator识别的工程目录与.meta文件,最终实现工程还原的目标。

h3i4j的博客 1497

FluidCAD代码原理揭秘:模型即JavaScript文件——双向同步的设计与实现思路

FluidCAD 是一款开源的参数化 CAD 软件,它最独特的设计是"模型即 JavaScript 文件":你用鼠标绘制的草图、拉伸、倒角,与编辑器里的代码始终指向同一个文件,双向同步——改任意一端,模型立即重建。本文将带你从源码层面拆解这套双向同步是怎么设计、怎么实现的。 ## 什么是"模型即文件":告别黑盒二进制 传统 CAD 软件(SolidWorks、Fusion 等)的模型是一个二进

gitblog_01185的博客 14

液压轴位置闭环控制(比例伺服阀应用)

液压阀的基础知识请参看下面的博客文章:PLC液压控制系列之比例流量阀结构分析_RXXW_Dor的博客-优快云博客比例流量阀液压同步控制的PID闭环调节可以参看下面这篇博文三菱FX3U-PLC 前馈+PID闭环调节实现液压同步控制(比例换向阀)_RXXW_Dor的博客-优快云博客液压控制系统在工业现场应用非常广泛,这篇博文我们简单分析下液压同步控制。这套系统的液压缸为单液压缸,首先简单介绍下什么是单作用液压缸,液压系统的详细理论分析大家可以找些专业书籍学习。

RXXW_Dor的博客 2267

基于YOLOv10的PCB电子元件智能识别系统设计与实现

数据预处理模块:负责对原始PCB图像进行标注、增强和格式转换模型训练模块:基于YOLOv10架构进行模型训练和优化推理检测模块:加载训练好的模型进行实时检测用户界面模块:提供友好的交互界面,方便用户操作和结果可视化YOLO(You Only Look Once)系列算法自2016年提出以来,经历了多次迭代更新。YOLOv1-v3:奠定了YOLO系列的基础架构YOLOv4-v7:引入大量优化技巧和网络结构改进YOLOv8-v9:进一步优化模型结构和训练策略YOLOv10。

YOLO 157

显卡支持的超分技术游戏里却用不了?OptiScaler 超分辨率替换完整攻略

OptiScaler 是一款开源的游戏超分辨率替换工具:它运行在游戏和显卡 API 之间,拦截游戏原本的超分调用,再把画面转发给你指定的任意后端执行。无论游戏只给了 DLSS、FSR 还是 XeSS 选项,你都能换成自己显卡上效果更好的方案,还能叠加锐化、缩放比例覆盖等画质调整,以及实验性的帧生成功能。对于老显卡用户、想在 DLSS 独占游戏里用 FSR/XeSS 的 Intel 与 AMD 玩家

gitblog_00676的博客 182

013 PID参数整定:Ziegler-Nichols法

几年前在调试一台伺服压机,客户要求位置精度±0.01mm,响应时间小于50ms。我按照教科书上的经验值设了P=1.5,I=0.02,D=0.01,结果电机一启动就开始尖叫,位置超调直接干到0.3mm,然后开始震荡,像极了喝醉的舞者。现场工程师看我的眼神,就像在看一个刚毕业的实习生。那次之后我明白了一个道理:PID参数不是靠猜的,也不是靠经验公式硬套的。你需要一个系统的方法,而Ziegler-Nichols法就是那个让你从“瞎调”走向“有章可循”的起点。

m0_50546716的博客 101

trackerslist 每日更新的 79 个 Tracker 清单:冷门资源跑满带宽的 BT 下载加速指南

为什么 Tracker 贴得越多,下载反而越慢?因为名单里每多一个早已停摆的地址,客户端就多白等一次超时——决定速度的从来不是数量,而是名单的鲜活程度。trackerslist 就是这个问题的一份现成解法:一个每天自动巡检、去重、排序的公共 Tracker 列表仓库,你拉取时拿到的永远是当下能用的那一版。 ## 一、trackerslist 是什么:把"塔台频率表"交给它维护 把 BT 下载想

gitblog_00647的博客 603

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WinBtrfs 上手实战:在 Windows 上直接读写 Linux 的 Btrfs 分区

WinBtrfs 是一款面向 Windows 的开源 Btrfs 文件系统驱动,装上它,资源管理器就能直接读写 Btrfs 分区,不需要借助第三方读取工具。如果你同时在用 Windows 和 Linux,或者有一块要在两个系统间共享的数据盘,它值得了解。项目是纯 Windows 侧重写,源码里找不到 Linux 内核代码,Windows XP 到 Windows 11 都能跑。 ## 能力速览:

gitblog_00662的博客 221

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TME技术笔试复盘:算法、机器学习与SQL备考全攻略

互联网大厂技术笔试是秋招淘汰率最高的关卡,考察内容远不止“背八股”,而是对算法、机器学习、数据结构与SQL等基础功底的综合检验。算法题考察动态规划、双指针、栈等经典模型,要求考生具备问题抽象与模式识别能力;机器学习和统计基础则通过业务场景描述考察对过拟合、置信区间、特征工程等概念的理解深度;SQL窗口函数与Hive/Spark调优更是数据类岗位的硬门槛。深入理解这些技术原理,才能在有限时间内高效解题,并应对开放性的业务分析题。从通用技术概念到具体工程实践,TME笔试复盘为备考者提供了触类旁通的思路,帮助大家

weixin_33922672的博客 468

Kimi K3与Claude Fable 5对比:前端开发与数学计算场景下的AI编程助手选择

AI编程助手作为现代软件开发的重要工具,其核心原理是基于大规模语言模型的代码生成与理解能力。通过深度学习技术,这些助手能够理解开发者的自然语言描述,并生成符合编程规范的代码。在工程实践中,AI编程助手的价值体现在提升开发效率、减少重复性编码工作以及辅助代码优化等方面。特别是在前端开发领域,组件化设计和响应式布局等概念对代码生成质量提出了较高要求;而在算法密集型任务中,数学建模和计算精度则成为关键考量因素。Kimi K3在前端代码生成方面表现出色,能够快速产出符合现代开发规范的React组件和CSS样式;Cl

weixin_34007886的博客 378

MPC-HC 字幕位置怎么调:9 种对齐 + 3 个偏移参数速查

你用 MPC-HC 打开一部 21:9 电影,字幕盖住了演员的脸,往上挪又挪不到黑边里。本文覆盖 MPC-HC 字幕位置的全部控制点:界面里的 9 种对齐、水平/垂直偏移、双轨位置分离,以及宽幅画面下的对齐参考系切换,全部对着当前版本的真实选项和参数讲。 ## 最快路径:3 步调好字幕位置 1. 播放中按 `O` 打开选项窗口,进入 **字幕 → 字幕** 页签([选项界面](https://

gitblog_00226的博客 623

AiSOC CrowdStrike Falcon 连接器:从 EDR 检测拉取、事件归一化到 RTR 响应动作的完整实现

本文以 AiSOC 仓库中的 CrowdStrike Falcon 连接器文档([crowdstrike.md](https://link.gitcode.com/i/7ddec6c83767bf74fe47d99c1226f0b9))为主体,完整覆盖该连接器的配置字段、凭证处理、控制台接入步骤与排障要点,并结合 `services/connectors` 与 `services/actions`

gitblog_00438的博客 373

蓝桥杯研究生组国赛真题的工程化解题方法论

在嵌入式与实时系统开发中,‘算法题’正加速向‘工程问题’演进。理解题目背后的物理约束、接口契约与鲁棒性要求,是区分学生思维与工程师思维的关键。蓝桥杯研究生组国赛真题并非单纯考察编码能力,而是通过工业级抽象、工程权衡和全链路验证,系统训练需求建模、性能预判与异常闭环等核心能力。尤其强调对‘原卷’中隐含假设、硬件参数附录及分段得分机制的深度解读——这正是真实研发场景中从模糊需求到可交付方案的关键跃迁路径。

weixin_34279184的博客 426

工控边缘AI中的PCIe与USB 2.0桥接技术解析

I/O桥接是工业现场实现传统传感器与边缘AI硬件协同的关键基础技术。其核心原理在于跨协议栈(PCIe高速总线与USB 2.0轮询架构)完成低延迟、高确定性数据通路构建,涉及协议转换、时序同步、DMA直通与EMC鲁棒性设计。该技术显著提升数据吞吐效率与实时性保障能力,支撑工业视觉质检、预测性维护、多源异构传感等典型Edge AI落地场景。尤其在USB 2.0与PCIe共存的工控边缘设备中,桥接方案需兼顾-20℃~70℃宽温运行、强电磁干扰抑制及零拷贝数据传输需求,成为连接老旧产线与新一代AI推理平台的物理枢纽

weixin_34357887的博客 248
上一篇: 数据结构与算法之二叉树: LeetCode 116. 填充每个节点的下一个右侧节点指针 (Ts版)
下一篇: 数据结构与算法之栈: LeetCode 556. 下一个更大元素 III (Ts版)
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值