class Cell {
public int row;
public int col;
public int value;
public Cell (int row, int col, int value) {
this.row = row;
this.col = col;
this.value = value;
}
}
class MyComparator implements Comparator<Cell> {
@override
public int compare(Cell c1, Cell c2) {
if (c1.value==c2.value) {
return 0;
}
return c1.value < c2.value ? -1; 1;
}
}
class ReverseComparator implements Comparator<Integer> {
@override
public int compare(Integer i1, Integer i2) {
if (i1.equals(i2)) {
return 0;
}
return i1 < i2 ? 1 : -1;
}
}
PriorityQueue<Cell> pQueue = new PriorityQueue<>
public class MinHeap {
private int[] array;
private int size;
public MinHeap(int[] array) {
if (array==null||array.length==0) {
throw new illegalArgumentException("input array cannot e null or empty");
}
this.array = array;
size = array.length;
heapify();
}
//see below
}
private void percolateUp(int index) {
int parent_idx = (index-1)/2;
if (parent_idx < 0 or array[index] > array[parent_idx]) {
return;
}
swap(index, parent_idx);
array[index], array[parent_idx] = array[parent_idx], array[index];
percolateUp(array, parent_idx)
}
private void percolateUp(int index) {
while(index>0) { //index<=0 exit
int parent_idx = (index-1)/2;
if (array[parent_idx])>array[index] {
swap(array, parent_idx, index);
} else {
break;
}
index = parent_idx
}
}
public static int[] smallestKElements(int[] array, int k) {
Queue<Integer> minHeap = new PriorityQueue<>;
for (int i = 0; i < array.length; i ++) {
minHeap.offer(array[i]);
}
int [] result = new int[k];
for (int i = 0; i< k; i++) {
result[i] = minHeap.poll();
}
return result;
}