2023/10/11 LeetCode

guardyou3
2023-10-12 / 47 评论 / 61 阅读 / 正在检测是否收录...

LeetCode P215数组中第K个最大元素
描述: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
lnmyi5lg.png

/**
     * P215数组中第k个最大元素(堆排序的做法)
     * @param nums
     * @param k
     * @return
     * 思路:堆排序只需要从堆顶取k-1个元素即是第k个最大元素值
     */
    public int findKthLargest(int[] nums, int k) {
        //构建堆,从最后一个没有叶子结点的开始
        for (int i=nums.length/2-1;i>=0;i--) {
            maxHeapify(nums,nums.length,i);
        }
        System.out.println(Arrays.toString(nums));
        for (int i=nums.length-1; i >= nums.length - k + 1;i--) {
            swap(nums,0,i); //将最大值放入数组最后
            maxHeapify(nums,i,0); //删除最后一个节点重建堆

        }
        return nums[0];
    }

    /**
     *
     * @param nums 数组
     * @param n 数组个数
     * @param i 当前堆顶元素下标
     */
    public void maxHeapify(int[] nums,int n,int i) {
        int largeMax = i;
        int left = i*2+1;
        int right = i*2+2;
        if (left<n&&nums[left]>nums[largeMax]) {
            largeMax = left;
        }
        if (right<n&&nums[right]>nums[largeMax]) {
            largeMax = right;
        }
        if (largeMax!=i) {
            swap(nums,i,largeMax); //将最大值放入堆顶
            maxHeapify(nums,n,largeMax); //重建堆
        }
    }

    /**
     * 数组交换
     * @param num
     * @param l
     * @param r
     */
    public void swap(int[] num,int l,int r) {
        int temp = num[l];
        num[l] = num[r];
        num[r] = temp;
    }
0

评论 (47)

取消
  1. 头像
    1
    Windows 10 · Google Chrome

    画图

    回复
  2. 头像
    1
    Windows 10 · Google Chrome

    555

    回复
  3. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  4. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  5. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  6. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  7. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
    1. 头像
      1
      Windows 10 · Google Chrome
      @ 1

      表情表情

      回复
  8. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  9. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  10. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  11. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  12. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  13. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  14. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  15. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  16. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  17. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  18. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  19. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  20. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  21. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  22. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  23. 头像
    1
    Windows 10 · Google Chrome

    表情

    回复
  24. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  25. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  26. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  27. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  28. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  29. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  30. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  31. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  32. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  33. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  34. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  35. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  36. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  37. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  38. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  39. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  40. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  41. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  42. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  43. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  44. 头像
    1
    Windows 10 · Google Chrome

    表情表情

    回复
  45. 头像
    1
    Windows 10 · Google Chrome

    555

    回复
  46. 头像
    1
    Windows 10 · Google Chrome

    555

    回复