【程序员面试宝典】实现一个集合栈

博客对输入参数进行解析,输入的ope是二维Vector数组,第二维度列限制为两个元素。当ope[i][0]=1时入栈,ope[i][1]为插入值;当ope[i][0]=2时出栈,ope[i][1]为空,还提到集合栈中每个栈的容量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
解析:刚开始没有反应过来题目是什么意思,仔细读了读才梳理出来:
输入的参数中ope是一个二维Vector数组,其中第二维度(也就是列)被限制为只有两个元素。例如ope[2][0]和ope[2][1]:
当ope[2][0]=1时,表示要入栈,ope[2][1]的值就是要插入的值。
当ope[]2[0]=2时,表示要出栈,此时ope[2][1]的值为空。
size为集合栈中每个栈的容量

class SetOfStacks {
public:
    vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size)
    {
        stack<stack<int>> myStack;
        stack<int> temp;
        int len=ope.size();
        for(int i=0;i<len;i++)
        {
        	//入栈的情况
            if(ope[i][0]==1)
            {	//栈满了
                if(temp.size()==size)
                {
                    myStack.push(temp);
                    stack<int>().swap(temp);
                	temp.push(ope[i][1]);
                }
                else//栈未满
                {
                	temp.push(ope[i][1]);
            	}
            }
            //出栈情况
            else if(ope[i][0]==2)
            {
            	//栈空
                if(temp.size()==0)
                {
                    temp=myStack.top();
                    myStack.pop();
                    temp.pop();
                }
                else//栈未空
                {
                	temp.pop();
            	}
            }
        }
        //如果temp中还有元素,则temp作为一个未满的栈入栈
        if(temp.size())
        {
            myStack.push(temp);
        }
        //将栈转化为二维vector输出
        int row=myStack.size();
        vector<vector<int>> ret(row);
        for(int i=row-1;i>=0;i--)
        {
            stack<int> tempStack=myStack.top();
            myStack.pop();
            int col=tempStack.size();
            vector<int> tempVector(col);
            for(int j=col-1;j>=0;j--)
            {
                tempVector[j]=tempStack.top();
                tempStack.pop();
            }
            ret[i]=tempVector;
        }
        return ret;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值