我正在为 coursera 相关课程做这个作业,并且是 Java、DS 和 Algo 的新手。我不会在这里粘贴我的整个代码。但下面是我在相关代码中面临的问题。
因此,要检索我正在使用的中位数PriorityQueue
和Comparator
接口。从下面的函数中,我尝试制作两个PriorityQueue
s,例如对于 21 个元素,hLow
优先级队列有 11 个最小的元素,而hHigh
有 10 个最高的元素。
public static void addToStream (int k) {
hLow.add (k);
if (hLow.size() > (hHigh.size() + 1)) {
hHigh.add(hLow.poll());
}
}
我写的比较器功能hLow
是
hLComp = new Comparator <Integer> () {
public int compare (Integer o1, Integer o2) {
return o1.compareTo(o2);
}
};
而对于hHigh
是
hHComp = new Comparator <Integer> () {
public int compare (Integer o1, Integer o2) {
return -o1.compareTo(o2);
}
};
我面临的问题是
hHigh.add(hLow.poll())
检索错误的值。例如,如果第一个值是 3000,那么这就是中位数,但是当第二个值出现时,例如是 6000。然后代码进入 if 条件,然后hHigh.peek
显示 3000 并hLow.peek
显示 6000。这与我的相反预计。