从heap取元素并调整heap的2种方法
1. 使用list, 调整的时候list可以删除尾部的元素
ArrayList<Integer> list = (ArrayList<Integer>)Arrays.stream(a).boxed().collect(
Collectors.toList());
//大根堆
buildHeap(list);
int maxK = 0;
for (int i = 0 ; i < K ; i++) {
maxK = list.get(0);
//顶换到底部
swap(list, list.size() - 1, 0);
//删除队尾元素
list.remove(list.size() - 1);
//向下调整
shiftDown(list, 0);
}
return maxK;
2. 使用临时数组从原来的数组copy n-1个元素
private void removeLast(int[] arr) {
arr[0] = arr[arr.length - 1];
int[] tempArr = new int[arr.length - 1];
System.arraycopy(arr, 0, tempArr, 0, arr.length - 1);
arr = tempArr;
shiftDown(arr, 0);
}
浙公网安备 33010602011771号