私はコーセラ関連のコースのためにこの宿題をしていて、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.peek3000がhLow.peek表示され、6000 が表示されます。予想。