Hoy en día, el uso de PriorityQueue máximo del montón, escribió un error.
redacción original:
Queue<Integer> heap = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
Después de lambda simplificada:
Queue<Integer> heap = new PriorityQueue<>((o1, o2) -> o2 - o1);
Señalar aquí o2-o1 se desbordará, que dará lugar a resultados incorrectos.
Por lo tanto, el uso de este enfoque es mejor:
Queue<Integer> heap = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
Después de lambda simplificada:
Queue<Integer> heap = new PriorityQueue<>((o1, o2) -> o2.compareTo(o1));
que
Queue<Integer> heap = new PriorityQueue<>(Comparator.reverseOrder());