高级农民
- 积分
- 2500
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-12-20
- 最后登录
- 1970-1-1
|
本楼: |
👍
0% (0)
|
|
0% (0)
👎
|
全局: |
👍 89% (2243) |
|
10% (274) 👎 |
Given a list of k sorted iterators. Implement MergingIterator to merge them. If you are not familiar with Iterators check similar questions.- public interface Iterator {
- /**
- * [url=home.php?mod=space&uid=160137]@return[/url] True if the there is a next element
- */
- boolean hasNext();
- /**
- * @return next Highest number and removes the items from the stream.
- */
- int getNextHighestNumber();
- }
- class MergedIterator {
- List<Iterator> _listIters;
- PriorityQueue<Pair<?,?>> maxHeap;
- /**
- * Construct MergedIterator.
- * @param iterators list of iterator
- */
- MergedIterator(List<Iterator> iterators) {
- if (iterators == null || iterators.size() <= 0) throw new Exception("");
- _listIters = iterators;
- maxHeap = new PriorityQueue<Pair<Int, Iterator>, >(new MyCompartor());
- for (Iterator iter: _listIters) {
- if (iter.hasNext())
- maxHeap.insert(new Pair(iter.getNextHighestNumber(), iter));
- }
- }
- /**
- * @return true if there is a next element.
- */
- boolean hasNext() {
- return maxHeap.size() > 0;
- }
- /**
- * @return next max element across all the iterators.
- */
- int getNextHighestNumber() {
- if (!hasNext()) throw new Exception("Empty");
- Pair pair = maxHeap.pop();
- int num = pair.getFirst();
- Iterator iter = pair.getSecond();
- if (iter.hasNext())
- maxHeap.insert(new Pair(iter.getNextHighestNumber(), iter));
- return num;
- }
- }
复制代码 |
评分
-
查看全部评分
|