若干数据结构& &算法面试题【一】(更新完毕)

  

http://zhweizhi.blog.51cto.com/10800691/1762077



为了在O(1)时间内取到栈内元素的最小值,显然遍历是行不通的。

我们需要在入栈和出栈的操作中记录最小值。


如果用一个变量(假设叫米)在入栈时记录并保存最小值,假如这个最小的元素出栈。

比如:

入栈元素分别为:4 3 2 1

这时m保存的最小值为1

但一旦将值为1的元素弹出,那么栈中实际最小的元素为2,但m的值仍为1。


因此我们还需要一个栈_stack。

每当入栈时,如果判断出当前元素为最小值,则将这个元素在压入我们实现的栈栈的同时,也压入_stack中。


template   class 堆栈   {   公众:   堆栈()   :_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

若干数据结构& &算法面试题【一】(更新完毕)