http://www.fgdsb.com/2015/01/06/recover-quack-data-structure/
给一个Quack的类,里面有三个方法:
pop(): 随机从头或者尾扔出一个元素;
peek(): 随机看头或者尾的一个元素,peek()之后pop()的话一定会pop()出peek()的那个元素;
push(): 向尾部插入一个元素问题是:给一个排序好的Quack,怎么把里面的元素原封不动的放到一个Array里面。
Follow up:如果quack里面有重复的元素,怎么处理。
对于不重复元素的情况,用queue存小的数,stack存大的数,先pop()一个数,再peek一下,比较这两个数,如果pop的大,就代表肯定是quack的尾巴,反之肯定是头,然后插入queue或者stack就行了。这里假设quack有empty方法。
|
|
对于有重复元素的情况,算法跟上面差不多,但是当遇到重复的时候,可以用一个hash_map记下来这个count,最后结算的时候补上去即可。
|
|
参考的quack类,测试用
|
|