-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMergingPeekingIncreasingIterator.java
More file actions
42 lines (33 loc) · 1.22 KB
/
Copy pathMergingPeekingIncreasingIterator.java
File metadata and controls
42 lines (33 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package seminar1.iterators;
import seminar1.collections.ArrayPriorityQueue;
import java.util.Comparator;
import java.util.Iterator;
/**
* Итератор возвращающий последовательность из N возрастающих итераторов в порядке возрастания
* first = 1,3,4,5,7
* second = 0,2,4,6,8
* result = 0,1,2,3,4,4,5,6,7,8
*
* Time = O(n + k * log n),
* n — количество итераторов
* k — суммарное количество элементов
*/
public class MergingPeekingIncreasingIterator implements Iterator<Integer> {
ArrayPriorityQueue<Integer> queue;
private Comparator<PeekingIncreasingIterator> comparator = (p1, p2) -> p1.peek().compareTo(p2.peek());
public MergingPeekingIncreasingIterator(IPeekingIterator... peekingIterator) {
/* TODO: implement it */
for (int i = 0; i < peekingIterator.length; i++) {
while ( peekingIterator[i].hasNext())
queue.add((Integer)peekingIterator[i].next());
}
}
@Override
public boolean hasNext() {
return (queue.size()!=0);
}
@Override
public Integer next() {
return queue.extractMin();
}
}