lc_top_0925

lc215 数组中的第k个最大大元素

快排解法

class Solution {
    public int findKthLargest(int[] nums, int k) {
        return findKthLargest(nums, k-1, 0, nums.length-1);
    }
    public int findKthLargest(int[] nums, int k, int left, int right) {
        int p = partition(nums, left, right);
        if (p == k) {
            return nums[p];
        } else if (p > k) {
            return findKthLargest(nums, k, left, p-1);
        } else {
            return findKthLargest(nums, k, p+1, right);
        }
    }
    private int partition(int[] nums, int left, int right) {
        int p = nums[left];
        int l = left;
        int r = right;
        while (l < r) {
            while (l < r && nums[r] < p) {
                r--;
            }
            while (l < r && nums[l] >= p) {
                l++;
            }
            if (l < r) {
                int t = nums[r];
                nums[r] = nums[l];
                nums[l] = t;
            }
        }
        nums[left] = nums[r];
        nums[r] = p;
        return r;
    }
}

完全基于快速排序的思路,执行patition函数进行“二分”,只是相当于修改了快排的主函数
快排思路见-->快排

堆排序解法

// todo

posted @   北de窗  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示