当前位置: 首页 > news >正文

双路快排--力扣215.数组中的第K个最大元素(java)

使用快速排序算法(实际上是快速选择算法)解决数组中的第K个最大元素问题,可以通过以下步骤实现:

方法思路

快速选择算法:基于快速排序的分区思想,每次选择一个基准元素将数组分为两部分,左边的元素小于等于基准,右边的元素大于基准。
//缩小搜索范围:根据基准元素的位置与目标位置(n - k)的比较,决定继续处理左半部分还是右半部分。
随机化基准:通过随机选择基准元素,避免最坏时间复杂度,提高算法效率。

解决代码

class Solution {
    public void quickSort(int[] nums, int left, int right) {

        // 终止条件
        if (left >= right) {
            return;
        }

        // 索引
        int index = partition(nums, left, right);
        quickSort(nums, left, index - 1);
        quickSort(nums, index + 1, right);
    }

    public int partition(int[] nums, int left, int right) {
        int randomIdx = (int) (((Math.random()) * (right - left + 1)) + left);
        swap(nums, randomIdx, left);
        int i = left + 1, j = right, pivot = nums[left];

        while (i <= j) { // 注意有\U0001f7f0, 比如 1 2
            // i找到第一个大于等于基准点的元素
            while (i <= j && nums[i] < pivot) {
                i++;
            }
            // j找到第一个小于等于基准点的元素
            while (i <= j && nums[j] > pivot) {
                j--;
            }
            if (i <= j) {
                swap(nums, i, j);
                i++;
                j--;
            }
        }
        swap(nums, j, left);
        return j;
    }

    public void swap(int[] nums, int left, int right) {
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
    }

    public int findKthLargest(int[] nums, int k) {
        quickSort(nums, 0, nums.length - 1);
        return nums[nums.length - k];
    }
}

相关文章:

  • 车载以太网测试-9【网络层】-子网划分的子网掩码VLAN
  • 项目组织管理类型-职能式组织和矩阵式组织的区别
  • 开发策略选择:如何为项目找到最优路径?
  • Keytool常见问题全解析:从环境配置到公钥提取
  • 创新技术引领软件供应链安全,助力数字中国建设
  • 浅述WinForm 和 WPF 的前景
  • Unity 封装一个依赖于MonoBehaviour的计时器(下) 链式调用
  • 【文献阅读】Zotero 新手完全教程:安装、使用与插件
  • 使用1Panel一键搭建WordPress网站的详细教程(全)
  • 2025移动端软件供应链安全开源治理方案最佳实践
  • linux操作系统实战
  • Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测
  • 作物移栽机器人的结构设计的介绍
  • 2025-03-13 学习记录--C/C++-PTA 练习2-12 输出华氏-摄氏温度转换表
  • 《算法笔记》8.2小节——搜索专题->广度优先搜索(BFS)问题 A: Jugs
  • 人工智能与人的智能,思维模型分享【3】直觉
  • 西方力推的5G O-RAN难以撼动传统通信设备商
  • c语言经典基础编程题
  • 【数据结构】6栈
  • Linux--gdb/cgdb
  • 破题“省会担当”,南京如何走好自己的路?
  • 推动粒子治疗更加可及可享!龚正调研上海市质子重离子医院
  • 这位中国电影早期的全能奇才,90年前唱响国歌
  • 一周人物|收藏家瓦尔特捐出藏品,女性艺术家“对话”摄影
  • 国家统计局:要持续加大好房子建设供应力度,积极推动城市更新行动和保障房建设
  • 海南保亭警方通报“两飞车党紧追女童”:两名初中生认错道歉