左神算法之单辅助栈排序算法

目录

  • 1. 题目
  • 2. 解释
  • 3. 思路
  • 4. 代码
  • 5. 总结

1. 题目

请编写一个程序,对一个栈里的整型数据,按升序进行排序(即排序前栈里的数据是无序的,排序后最大元素位于栈顶)。要求最多只能使用一个额外的栈存放临时数据,且不得将元素复制到别的数据结构中。

2. 解释

  • 输入:一个无序的整数栈
  • 输出:一个升序排列的栈(栈顶为最大元素)
  • 限制条件
    1. 只能使用一个额外的栈作为辅助空间
    2. 不能使用其他数据结构(如数组、队列等)
    3. 只能使用栈的标准操作(push, pop, peek, isEmpty

3. 思路

核心算法:使用类似插入排序的思想,借助辅助栈实现排序

  1. 初始化一个辅助栈 sortedStack(最终存放排序结果)
  2. 当原栈不为空时:
    • 弹出原栈的栈顶元素 temp
    • 如果 sortedStack 不为空且 tempsortedStack 的栈顶元素大,则将 sortedStack 的元素弹出并压回原栈,直到找到 temp 的正确位置 ,否则将元素temp放入到 sortedStack
    • temp 压入 sortedStack
  3. 最终 sortedStack 即为升序排列的栈

时间复杂度:O(n²)(最坏情况下需要反复移动元素)
空间复杂度:O(n)(仅使用一个额外栈)

4. 代码

import java.util.Stack;public class StackSorter {public static Stack<Integer> sortStack(Stack<Integer> inputStack) {Stack<Integer> sortedStack = new Stack<>();while (!inputStack.isEmpty()) {int temp = inputStack.pop();// 将 sortedStack 中比 temp 大的元素移回 inputStackwhile (!sortedStack.isEmpty() && sortedStack.peek() > temp) {inputStack.push(sortedStack.pop());}sortedStack.push(temp);}return sortedStack;}public static void main(String[] args) {Stack<Integer> stack = new Stack<>();stack.push(5);stack.push(1);stack.push(4);stack.push(2);stack.push(3);System.out.println("排序前: " + stack);Stack<Integer> sortedStack = sortStack(stack);System.out.println("排序后: " + sortedStack);}
}

输出示例

排序前: [5, 1, 4, 2, 3]
排序后: [1, 2, 3, 4, 5]  // 栈顶为5(最大元素)

5. 总结

  • 关键点:利用辅助栈实现类似插入排序的算法,通过比较和临时回退操作确保正确排序。
  • 限制满足:仅使用一个额外栈,没有借助其他数据结构。
  • 适用场景:适用于栈排序的经典问题,如面试题或算法练习。
  • 优化思考:虽然时间复杂度为 O(n²),但在栈操作限制下已是最优解法。

变体思考

  • 如果要降序排序(栈顶为最小元素),只需修改比较条件为 sortedStack.peek() < temp
  • 如果允许使用递归(隐式使用调用栈),可以尝试递归解法,但空间复杂度可能更高。

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

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

相关文章

使用Trae编辑器与MCP协议构建高德地图定制化服务

目录 一、使用Trae编辑器配置高德MCP Server 1.1 Trae介绍 1.2 从mcp.so中获取配置高德地图mcp server配置信息 1.3 高德地图开发者配置 1.4 添加Filesystem 到Trae 1.5 使用结果展示 1.6 MCP常见命令行工具和包管理说明 1.7 Function Call工具和MCP技术对比 二、本地…

【LLaMA-Factory 实战系列】三、命令行篇 - YAML 配置与高效微调 Qwen2.5-VL

【LLaMA-Factory 实战系列】三、命令行篇 - YAML 配置与高效微调 Qwen2.5-VL 1. 引言2. 为什么从 WebUI 转向命令行&#xff1f;3. 准备工作&#xff08;回顾&#xff09;4. 核心&#xff1a;创建并理解训练配置文件4.1 选择并复制基础模板4.2 逐一解析与修改配置文件4.3 参数详…

推荐:ToB销售B2B销售大客户营销大客户销售培训师培训讲师唐兴通讲销售技巧数字化销售销AI销售如何有效获取客户与业绩

站在AI浪潮之巅&#xff0c;重塑销售之魂 在AI时代&#xff0c;普通销售人员&#xff08;TOB、TOC&#xff09;除了传统的销售动作之外&#xff0c;还能做什么&#xff1f;怎么做&#xff1f; 这是《AI销冠》这本书想探讨的核心问题。 特别喜欢编辑老师总结的&#xff1a; 读者…

爬取小红书相关数据导入到excel

本期我们来进行实战,爬取小红书的相关数据导入到excel中,后续可进行些数据分析,今后或者已经在运营小红书的小伙伴应该比较喜欢这些数据。今天我们的主角是DrissionPage,相对于之前介绍的selenium省去了很多的配置,直接安装了就能使用。 DrissionPage 是一个基于 python …

c++面试题每日一学记录- C++对象模型与内存对齐深度原理详解

一、C++对象模型核心原理 1. 对象内存布局基础原理 设计哲学: 零开销原则:不为未使用的特性付出代价(如无虚函数则无vptr)兼容性:C结构体在C++中保持相同内存布局多态支持:通过虚函数表实现运行时动态绑定内存布局实现机制: 编译器处理步骤: 成员排列:严格按声明顺序…

Kafka 监控与调优实战指南(二)

五、Kafka 性能问题剖析 5.1 消息丢失 消息丢失是 Kafka 使用过程中较为严重的问题&#xff0c;可能由多种原因导致。在生产者端&#xff0c;如果配置不当&#xff0c;比如将acks参数设置为0&#xff0c;生产者发送消息后不会等待 Kafka broker 的确认&#xff0c;就继续发送…

Linux下SVN报错:Unable to connect to a repository at URL ‘svn://XXX‘

一、问题描述 Linux下通过SVN执行提交&#xff08;commit&#xff09;操作时报错&#xff1a;Unable to connect to a repository at URL svn://XXX&#xff1a; 二、解决方法 导致该问题的一个可能原因是远程仓库的URL发生变化了&#xff0c;即svn服务器的ip变更了。这时可…

Modbus 扫描 从站号、波特率

下载链接&#xff1a;https://pan.quark.cn/s/533ceb8e397d 下载链接: https://pan.baidu.com/s/1PQHn-MwfzrWgF2UrXQDoGg 提取码: 1111

Docker 容器通信与数据持久化

目录 简介 一、Docker 容器通信 1. Docker 网络模式 2. Bridge 模式 3. Host 模式 4. Container 模式 5. Overlay 模式 6. 端口映射&#xff1a;容器与外部的桥梁 7. 容器互联&#xff1a;从 --link 到自定义网络 二、Docker 数据持久化 1. 数据卷&#xff1a;Docke…

【教学类-89-08】20250624新年篇05——元宵节灯笼2CM黏贴边(倒置和正立数字 )

背景需求&#xff1a; 【教学类-89-06】20250220新年篇05——元宵节灯笼2CM黏贴边&#xff08;3边形到50边形&#xff0c;一页1图、2图、4图&#xff0c;适合不同水平&#xff0c;适合不同阶段&#xff09;-CSDN博客文章浏览阅读1.6k次&#xff0c;点赞35次&#xff0c;收藏27…

【DB2】SQL0104N An unexpected token “OCTETS“ was found following “……

db2创建表时报标题的错误&#xff0c;建表语句如下 db2 "CREATE TABLE YS.TEST_1(ID VARCHAR(64 OCTETS))"去掉octets就好了 经过测试&#xff0c;在9.7版本报错&#xff0c;在10.5.11没问题&#xff0c;怀疑版本差异导致 在官网查找资料&#xff0c;应该是10.5才…

暴雨以信创委员会成员单位身份参与南京专题活动

6月19日&#xff0c;中国电子工业标准化技术协会信息技术应用创新工作委员会&#xff08;简称信创工委会&#xff09;联合南京市工业和信息化局共同举办的“智启未来&#xff1a;AI赋能信息技术应用创新办公新势力”专题活动在南京成功举办。南京市工业和信息化局副局长代吉上、…

基于keepalived、vip实现高可用nginx (centos)

基于keepalived、vip实现高可用nginx &#xff08;centos&#xff09; 1、安装keepalived yum install keepalived2、选同一局域网空置ip作vip 我这里测试是&#xff1a; 主&#xff1a;192.168.163.134 副&#xff1a;192.168.163.135 vip&#xff1a;192.168.163.1403、ke…

使用 launch 启动 rviz2 并加载机器人模型

视频资料&#xff1a;《ROS 2机器人开发从入门到实践》6.2.2 在RViz中显示机器人_哔哩哔哩_bilibili 1、创建工作空间 chapt6_ws/src&#xff0c;创建包 fishrobot_description ros2 create fishrobot_description --build-type ament_cmake --license Apache-2.0 2、创建机器…

华为云Flexus+DeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践

华为云FlexusDeepSeek征文 | 基于CCE容器的AI Agent高可用部署架构与弹性扩容实践 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 …

Python学习Day41

学习来源&#xff1a;浙大疏锦行 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; …

数组题解——最长回文子串【LeetCode】

5. 最长回文子串 一、向右拓展 算法思路 你用res记录当前找到的最长回文子串。每次遍历到s[i]时&#xff0c;尝试找到以s[i]结尾的、比当前res更长的回文子串。 先尝试长度为len(res)2&#xff08;即起点i-len(res)-1&#xff09;的子串&#xff0c;看是不是回文。如果不是&…

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

&#x1f680; 从零搭建 Ubuntu22.04 Python3.11 PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub 在 AI 项目开发中&#xff0c;构建统一的运行环境是一件非常重要的事情。使用 Docker 可以极大地提升部署效率、保证环境一致性。本文将手把手带你&#xff1a; ✅ 构建一个…

纪念抗战胜利知识答题pk小程序

纪念抗战胜利知识答题PK小程序通常有以下功能&#xff1a; 一、基础答题功能 题目展示&#xff1a;清晰呈现题目内容&#xff0c;支持文字、图片、音频或视频等多种形式的题目素材&#xff0c;且能按选择题、填空题、判断题等不同题型分类展示。答案提交与判断&#xff1a;用…

AI模型本质与学习范式解析

从统计学习&#xff08;也就是数学&#xff09;的角度来分析深度学习模型的本质。 频率派与贝叶斯派对模型本质理解的差异&#xff1a;前者认为学习参数估计&#xff0c;后者认为学习后验分布。不过这个问题下概率分布的视角更本质。 三个核心部分&#xff1a;任务类型分类&a…