美文网首页
程序员面试金典_SetOfStacks

程序员面试金典_SetOfStacks

作者: 掌灬纹 | 来源:发表于2019-05-02 11:37 被阅读0次

原书中描述设想有一堆盘子,堆太高可能会倒下来;在现实生活中,盘子堆到一定高度时重新堆另外一堆盘子。请实现一种数据结构SetOfStacks,模拟这种行为。

为了方便检测,设置多行两列的操作数组op[][];每行第一个数代表操作,若为1,push进栈、第二个数为进栈数据;若为2,pop出栈;size表示每个栈最大容量,超过栈的容量则申请新栈,最后返回所有栈
Java代码参考

import java.util.ArrayList;
import java.util.Stack;

public class _03SetOfStacks {
    public static void main(String[] args) {
        int[][] op = {//模拟进栈1,2,3,4;出栈
                {1, 1},
                {1, 2},
                {1, 3},
                {1, 4},
                {2, 0}
        };
        int size = 2;//每个栈最大容量2
        ArrayList<Stack<Integer>> res = setOfStacks(op, size);
        System.out.println(res.toString());

    }

    private static ArrayList<Stack<Integer>> setOfStacks(int[][] op, int size) {
        ArrayList<Stack<Integer>> ans = new ArrayList<>();
        Stack<Integer> current = new Stack<>();//当前操作栈
        for(int i = 0; i < op.length; i++) {
            int operate = op[i][0];//操作数1-进栈;2-出栈
            int data = op[i][1];//进栈数据
            if(operate == 1) {//进栈
                if(current.size() == size) {//栈满
                    ans.add(current);
                    current = new Stack<Integer>();
                }
                current.push(data);
            }else if(operate == 2) {
                if(current.size() <= 0) {
                    current = ans.get(ans.size() - 1);
                    ans.remove(ans.size());
                }else {
                    current.pop();
                }
            }
            if(i == op.length - 1&&current.size() < size)//最后一个未满栈的添加
                ans.add(current);
        }
        
        return ans;
    }

}

相关文章

  • 程序员面试金典_SetOfStacks

    原书中描述设想有一堆盘子,堆太高可能会倒下来;在现实生活中,盘子堆到一定高度时重新堆另外一堆盘子。请实现一种数据结...

  • 处理字符串原则

    摘自《程序员面试金典》

  • 第二天

    《程序员面试金典》前七章是建议和经验,还有一些面试信息。第八章是考题,第九章是解题技巧。今天来刷一刷《程序员面试金...

  • 面试题 02.01. 移除重复节点

    出自程序员的面试金典#### 面试题 02.01. 移除重复节点编写代码,移除未排序链表中的重复节点。保留最开始出...

  • 5.链表常见操作

    推荐大家看下《编程之美》、《程序员面试金典》 还有编程相关网站:leetcode老师讲的很多题其实就是这些书和网...

  • 回文链表

    题目来源: 牛客网--程序员面试金典 题目描述 请编写一个函数,检查链表是否为回文。给定一个链表ListNode*...

  • 某秋招打法及其细节

    《剑指offer》刷了一遍,有些重点的题一定要滚瓜烂熟。《大话设计模式》《mysql必知必会》《程序员面试金典》《...

  • 经典面试题之链表

    《程序员面试金典》p49,2.6, 求单链表环路的入口结点。 相关题目:给定两个单链表,求他们的共同交点。解法:(...

  • 1.0 推荐书籍与学习方法

    Chapter1: 位运算的奇技淫巧 1.0 推荐书籍与学习方法 推荐书籍 《程序员面试金典》 《挑战程序设计竞赛...

  • 程序员面试金典(题目摘录)

    算法与数据结构面试 基础数学 等比数列求和公式![](http://latex.codecogs.com/svg....

网友评论

      本文标题:程序员面试金典_SetOfStacks

      本文链接:https://www.haomeiwen.com/subject/tacnnqtx.html