双栈排序之程序员面试经典
来源:互联网 发布:java 内置des加密 编辑:程序博客网 时间:2024/04/27 14:52
题目描述
请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。
给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。
<pre name="code" class="java">package com.mianshi;import java.util.ArrayList;import java.util.Stack;public class jingdian_16 {public static void main(String[] args) {int[] numbers =new int[]{2,1,5,3,4};ArrayList<Integer> list =jingdian_16.twoStacksSort(numbers);for(int i=0;i<list.size();i++){System.out.print(list.get(i)+" ");}}public static ArrayList<Integer> twoStacksSort(int[] numbers) { //栈1存储数据Stack<Integer> stack1 =new Stack<Integer>();//栈2临时存储Stack<Integer> stack2 =new Stack<Integer>();ArrayList<Integer> list =new ArrayList<Integer>();for(int i=0;i<numbers.length;i++){ stack1.push(numbers[i]);}//isEmpty()判断是否为空,是空返回true,不是返回falsewhile(!stack1.isEmpty()){//stack1中最上边的元素出栈 int a =stack1.pop(); //判断stack2中是否已经有数据,并且如果里面顶上的数据大于stack1中刚弹出的a,则需要换位置 //stack2.peek()表示得到栈顶的值但不需要弹出 while(!stack2.isEmpty() && stack2.peek()>a){ //如果成立则有,将stack2中的栈顶数据弹出放到stack1 stack1.push(stack2.pop()); //继续循环判断是否还有符合条件的 } //循环之后就需要将stack1弹出的数据放到stack2中 stack2.push(a);} //遍历输出while(!stack2.isEmpty()){list.add(stack2.pop());} return list; }}
0 0
- 双栈排序之程序员面试经典
- 程序员面试经典--栈排序
- 集合栈之程序员面试经典
- 程序员面试经典题--归并排序
- 用两个栈实现队列之程序员面试经典
- 《程序员面试金典》双栈排序
- 确定两串乱序同构之程序员面试经典
- 基本字符串压缩之程序员面试经典
- 像素翻转之程序员面试经典
- 清除行列之程序员面试经典
- 程序员面试经典之链表分割
- 链式A+B之程序员面试经典
- 回文链表之程序员面试经典
- 猫狗收容所之程序员面试经典
- 输出单层结点之程序员面试经典
- 面试经典算法1之交换排序
- 面试经典算法2之插入排序
- 面试经典算法3之选择排序
- Mysql DATE_FORMAT函数用法
- 大数据流处理(SparkStreaming)核心源码解读以StreamingContext为主
- 头文件搜索路径
- android 中math常用方法
- RMQ算法
- 双栈排序之程序员面试经典
- BZOJ2440: [中山市选2011]完全平方数dizh
- 简单的ADSL登录界面
- namespace 命名空间
- mysql优化limit查询语句的5个方法
- LeetCode---Remove Duplicates from Sorted Array、Remove Duplicates from Sorted Array II解题分析
- Java开发中的23种设计模式详解
- mysql添加唯一约束语句
- 练习打字第五天!