zoukankan      html  css  js  c++  java
  • 【16】双栈排序

    【题目】

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

    给定一个int[] numbers(C++中为vector&ltint>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。

    测试样例:
    [1,2,3,4,5]
    返回:[5,4,3,2,1]

    【代码】

    import java.util.*;
    
    public class TwoStacks {
        public ArrayList<Integer> twoStacksSort(int[] numbers) {
    
            ArrayList<Integer> list = new ArrayList<Integer>();
            
            //构建栈,并初始化栈
            Stack<Integer> initStack = new Stack<>();
            for (int i = 0 ; i < numbers.length; i++){
                initStack.push(numbers[i]);
            }
            
            //构建辅助栈,用来存放排好序的数
            Stack<Integer> tempStack = new Stack<>();
            while(!initStack.isEmpty()){
                
                if (tempStack.isEmpty()){
                    tempStack.push(initStack.pop());
                }else {
                    //新建变量,存储原始栈中待排序的栈
                    int tmp = initStack.pop();
                    
                    //将辅助栈中的排好序中的大于tmp的数放入原始栈中
                    while (!tempStack.isEmpty() && tempStack.peek() > tmp){
                        initStack.push(tempStack.pop());
                    }
                    //辅助栈存储之前保存的变量
                    tempStack.push(tmp);
                    
                }
                
                
            }
            
            while(!tempStack.isEmpty()){
                list.add(tempStack.pop());
            }
            
            return list;
        }
    }

    解析:

  • 相关阅读:
    求转置矩阵问题
    喷水装置
    面试之谈
    迭代任意8种数据类型数组
    Session那点事
    随机验证码
    正则表达式:网页爬虫
    模拟上传服务端
    Properties集合的练习
    用递归算法对指定目录的深度遍历
  • 原文地址:https://www.cnblogs.com/noaman/p/7065446.html
Copyright © 2011-2022 走看看