http://zhweizhi.blog.51cto.com/10800691/1762077
为了在O(1)时间内取到栈内元素的最小值,显然遍历是行不通的。
我们需要在入栈和出栈的操作中记录最小值。
如果用一个变量(假设叫米)在入栈时记录并保存最小值,假如这个最小的元素出栈。
比如:
入栈元素分别为:4 3 2 1
这时m保存的最小值为1
但一旦将值为1的元素弹出,那么栈中实际最小的元素为2,但m的值仍为1。
因此我们还需要一个栈_stack。
每当入栈时,如果判断出当前元素为最小值,则将这个元素在压入我们实现的栈栈的同时,也压入_stack中。
templateclass 堆栈 { 公众: 堆栈() :_sz (0) {} void 推动(const T 和数据) { if (_sz ==, 0) { 时间=_min 数据; _stack.push (_min); } if (_min 祝辞=,数据),,,,,,,,,,,,,,//最小元素可能重复的情况 { 时间=_min 数据; _stack.push (_min); } _arr [_sz + +],=,数据; } void Pop () { if (_arr [_sz 安康;1],==,_min) { _stack.pop (); 时间=_min _stack.top (); } ——_sz; } void Print () { for (int 小姐:=,0;,小姐:& lt;, _sz;,我+ +) { cout & lt; & lt;, _arr[我],& lt; & lt;,“,”; } cout & lt; & lt;, endl; } T , Min () { return _min; } 保护: T _arr [100]; int _sz; int _min; stack
元素出栈、入栈顺序的合法性。如入栈的序列(1、2、3、4、5),出栈序列为(4、5、3、2、1)
(待续··)
(待续··)
代码:https://github.com/HonestFox/BrushQuestion/edit/master/2_%E8%8E%B7%E5%8F%96%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8F%AA%E5%87%BA%E7%8E%B0%E4%B8%80%E6%AC%A1%E7%9A%84%E5%AD%97%E7%AC%A6.cpp
,,给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。
, 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};
针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。
全部代码:https://github.com/HonestFox/BrushQuestion/blob/master/1_%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.c
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
全部代码:
https://github.com/HonestFox/BrushQuestion/edit/master/2_%E8%8E%B7%E5%8F%96%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8F%AA%E5%87%BA%E7%8E%B0%E4%B8%80%E6%AC%A1%E7%9A%84%E5%AD%97%E7%AC%A6.cpp
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
全部代码:
https://github.com/HonestFox/BrushQuestion/blob/master/3_%E5%88%A0%E9%99%A4%E6%9C%89%E5%BA%8F%E9%93%BE%E8%A1%A8%E9%87%8D%E5%A4%8D%E5%85%83%E7%B4%A0.cpp
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。
数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。
请找出数组中任意一个重复的数字。
例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
全部代码:
https://github.com/HonestFox/BrushQuestion/blob/master/3_%E5%88%A0%E9%99%A4%E6%9C%89%E5%BA%8F%E9%93%BE%E8%A1%A8%E9%87%8D%E5%A4%8D%E5%85%83%E7%B4%A0.cpp
若干数据结构& &算法面试题【一】(更新完毕)