3.3---集合栈

思路:注意一下别写错add还是remove

public class SetOfStacks {
   public static ArrayList<ArrayList<Integer>> setOfStacks(int[][] ope, int size) {
        // write code here

        ArrayList<ArrayList<Integer>> res = new ArrayList();
        ArrayList<Integer> list = new ArrayList();

        res.add(list);
        if(ope.length == 0) return res;

        for(int i = 0; i < ope.length; i++){
            ArrayList<Integer> tmp     = null;
            if(ope[i][0] == 1){

                if(res.get(res.size() - 1).size() == size){
                    tmp = new ArrayList();
                }
                else{
                    tmp = res.get(res.size() - 1);
                    res.remove(res.size() - 1);
                }

                tmp.add(ope[i][1]);

                res.add(tmp);
            }
            else{
                if(res.get(res.size() -1).size() != 0){
                    tmp = res.get(res.size() - 1);
                    res.remove(res.size() - 1);
                    tmp.remove(tmp.size() - 1);
                    if(tmp.size() != 0)
                    res.add(tmp);
                }
                else{
                    res.remove(res.size() - 1);
                }

            }
        }

        return res;

    }
}
时间: 2024-10-15 20:27:00

3.3---集合栈的相关文章

算法入门经典-第五章 例题 5-5 集合栈计算机

The SetStack Computer Time limit: 3.000 seconds 题目是这样的: 有一个专门为了集合运算而设计的"集合栈"计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集"{}"入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入栈INTERSECT:出栈两个集合,然后把二者的交集入栈ADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈       每次操作后,输出

stack 集合栈计算机 (摘)

有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入栈INTERSECT:出栈两个集合,然后把二者的交集入栈ADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈       每次操作后,输出栈顶集合的大小(即元素个数).例如栈顶元素是A={ {}, {{}} }, 下一个元素是B={ {}, {{{}}} },则:UNION操作将

UVa - 12096 集合栈计算机(STL)

[题意] 有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入栈,并输出并集的sizeINTERSECT:出栈两个集合,然后把二者的交集入栈,并输出交集的sizeADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈,并输出结果的size       每次操作后,输出栈顶集合的大小(即元素个数).例如栈顶元素是A={ {}, {{}

集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC 2006,UVa12096)

集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC 2006,UVa12096) 对于集合的集合,很难直接表示,因此,为方便起见,为每个不同的集合分配一个不同的ID,每个集合都可以表示成所含集合的ID集合,一个集合就可以表示为一个set 我的理解: {}:1 {{}} 2 栈中的都是集合,所以也是int类型的 实际进行操作的过程中,可以用map将每种集合和对应的ID关联起来,这样做既可以完成查找ID的任务,还可以同时判定是否出现了新的集合. 用vector作

【13】集合栈

[题目] 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通栈相同的push和pop操作. 给定一个操作序列int[][2] ope(C++为vector&ltvector&ltint>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字:若为2,则为pop操作,后一个数无意义.请返回一个int[][](C++为vector&ltvector&am

2017年11月4日 vs类和结构的区别&amp;哈希表&amp;队列集合&amp;栈集合&amp;函数

类和结构的区别 类: 类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存 类有构造和析构函数 类可以继承和被继承 结构: 结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象. 结构没有构造函数,但可以添加.结构没有析构函数 结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口 //哈希表 //不规定长度 不规定类型 不规定建类型 //Hashtable j = new Hashtable(); //

【c#基础】集合--栈Stack 链表 LinkList 有序列表SortedList 字典

栈:是一个后进先出(LIFO)的容器 栈 push()方法在栈中添加元素,用Pop()方法获取最近添加的元素. 于Queue<T>类相似,Stack<T>类实现IEnumerable<T>和ICollection接口 Count   返回栈中的元素个数 Push    在栈顶添加一个元素 Pop 从站定删除一个元素,并返回该元素,如果栈是空的,就抛出InvalidOperationException异常 Peek    返回栈顶的元素,但不删除它 Contains 确定

集合栈

对入栈和出栈操作,top都需要相应加减,对一些条件的判断. /***************************************************** * \file SetOfStacks.cpp * \date 2016/05/05 17:49 * \问题描述: 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈. 该数据结构应支持与普通栈相同的push和pop操作. 给定一个操作序列int[][2] ope(C

设计一个集合栈

题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通栈相同的push和pop操作. 给定一个操作序列int[][2] ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字:若为2,则为pop操作,后一个数无意义.请返回一个int[][](C++为vector<vector<int>&

3.3集合栈

题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通栈相同的push和pop操作. 给定一个操作序列int[][2] ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字:若为2,则为pop操作,后一个数无意义.请返回一个int[][](C++为vector<vector<int>&