从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);
    }

  

 

posted @ 2022-11-19 12:36  yanher  阅读(42)  评论(0)    收藏  举报