算法零基础自学,零起点学算法
Yyds干货库存
不废话就开始吧。
参考剑招09。用两个栈实现队列主题的链接
求解类队列{
私人:
stack int stack1,stack2
公共:
CQueue() {}
void appendTail(int value) {
stack1.push(值);
}
int deleteHead() {
if (stack2.empty()) {
if (stack1.empty()) {
return-1;
}
而(!stack1.empty()) {
stack 2 . push(stack 1 . top());
stack 1 . pop();
}
}
int value=stack 2 . top();
stack 2 . pop();
返回值;
}
};
解析标题需要用stack实现队列,具体指两个操作:在队列末尾添加整数,在头部删除元素。
如果堆栈的底部被视为队列的头部,堆栈的顶部被视为队列的尾部,则
对于向队列末尾添加整数,可以直接使用堆栈的push方法。
对于删除头部的元素,栈没有提供删除栈底元素的方法,需要添加一个辅助栈stack2。
当stack1中的元素被依次推送到stack2时,stack2就变成了原stack1的翻转,然后可以用stack2.pop删除它。
至于把stack2重新安装回stack1,这个问题不考虑。
补充总结是学习计划中的第一题,不过是看了官方解答后写的。一开始不明白输入输出。
输入:
[CQueue , appendTail , deleteHead , deleteHead , deleteHead]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
这里,下面的数组是CQueue的原貌,上面的数组是输入命令。
并且输出是在每次输入命令时输出一个值。
Stack1和stack2是私有定义的,通过成员函数访问。
指剑报价30。包含最小函数的堆栈标题链接。
求解类MinStack {
stack int stack1,stack2
公共:
/**在此初始化您的数据结构。*/
MinStack() {
stack 2 . push(INT _ MAX);
}
void push(int x) {
stack 1 . push(x);
stack2.push(:min(stack2.top(),x));
}
void pop() {
stack 1 . pop();
stack 2 . pop();
}
int top() {
返回stack 1 . top();
}
int min() {
返回stack 2 . top();
}
};
为了解决这个问题,我们需要使用堆栈来实现一个函数,可以返回堆栈中最小的整数。
相对于从栈中重新查找,还可以设置一个辅助栈stack2,每次放入栈中存储最小数。
也就是stack2.push(min(new,old)),之后当stack1元素出栈时,stack2中的元素也出栈,保持两者的个数不变,保证stack2栈顶的元素始终是stack1中最小的元素。
相比补充总结,第一题难度较小。
你需要注意的是在构造函数中初始化stack2,INT_MAX是一个整数常量,代表最大的整数。
,转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。