之前写了一篇使用LinkedList+TreeMap实现栈的入栈和弹栈功能,并且记录入栈的最小值和最大值的博客。
近来在找工作,看到了很多面试题关于数据结构和算法的。题目类似于:对一个乱序数组不使用排序算法,但是得到倒数第二个值/得到中位数/得到第n个值之类的问题,成功勾引起了我的兴趣。
想了想,使用合适的数据结构来解决这个问题。
一种是使用TreeMap结构—解决特殊的–没有重复数字时候的问题
一种是使用PriorityQueue解决更一般情况下–有重复数字时候的问题
**
- 一、使用TreeMap/TreeSet—数组中没有重复数字的时候可以使用
**
比如一个数组:int[]a= {3,4,500,6,101,13,54,75,76,100,10000,100001};
要不使用排序,却得到某个次序的值。
看了几个分享的案例,脑阔疼,自己就自然而然想到了之前使用的TreeMap,因为它可以将放进去的数字按照自然顺序从小到大排列啊,那岂不美哉?还用写什么forEach循环,条件判断?(结果还是要写一点的):
代码如下:
int[]a= {3,4,500,6,101,13,54,75,76,100,10000,100001};
Map<Integer, Object> treeMap = new TreeMap<>();
for(int i=0;i<a.length;i++) {
treeMap.put(a[i], a[i]);
}
/*迭代器的方法:
Iterator<En