私はコーセラ関連のコースのためにこの宿題をしていて、Java と DS と Algo は初めてです。ここにコード全体を貼り付けることはしません。しかし、以下は、関連するコードで直面している問題です。
したがって、私が使用している中央値PriorityQueue
とComparator
インターフェイスを取得するには. PriorityQueue
以下の関数から、たとえば 21 個の要素の場合、hLow
優先度キューに最小の要素が 11 個あり、hHigh
最大の要素が 10 個あるように 2 つの s を作成しようとしています。
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);
}
};
そして forhHigh
は
hHComp = new Comparator <Integer> () {
public int compare (Integer o1, Integer o2) {
return -o1.compareTo(o2);
}
};
私が直面している問題は、
hHigh.add(hLow.poll())
間違った値を取得します。たとえば、最初の値が 3000 の場合、それは中央値ですが、2 番目の値が入ると、たとえば 6000 になります。次に、コードが if 条件に入り、その後、hHigh.peek
3000がhLow.peek
表示され、6000 が表示されます。予想。