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

LCR 076. 数组中的第 K 个最大元素

一、题目描述

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

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

示例 1:

输入:nums = [3,2,1,5,6,4], k = 2
输出:5
示例 2:

输入:nums = [3,2,3,1,2,4,5,5,6], k = 4
输出:4

提示:

1 <= k <= nums.length <= 104
-104 <= nums[i] <= 104

二、题目解析

1、插入排序

class Solution {public int findKthLargest(int[] nums, int k) {insertSort(nums);return nums[k - 1];}public void insertSort(int[] nums) {for(int i = 1;i < nums.length;i++){int target = nums[i];int j = i - 1;;for(;j >= 0;j--){if(nums[j] < target){nums[j+1] = nums[j];}else{//找到第一个大于待排元素的元素break;}            }//注意此处不能为nums[j+1] = nums[i],因为在交换过程中nums[i]被改变nums[j+1] = target;}}
}

2、快速排序思想1(一次扫描交换一个到目标位置)
左指针指向i=0,待排元素,(循环遍历前存储待排元素)
右指针指向j=length-1,最后一个元素。
从j位置往前遍历,找到大于待排元素,把该元素换到左指针指向位置(此时右指针位置废弃);
从i位置往后遍历,找到小于待排元素,把该元素换到右指针指向位置(上轮的废弃位置;且此时左指针位置废弃,下一轮遍历将交换到该位置);
再从j位置往前遍历,以此类推。
在此过程中,i走过的区域都是大于等于待排元素的,j走过的区域都是小于待排元素的,最后i和j相遇且指向的都是废弃元素。直接把待排元素排到这里即可。

class Solution {public int findKthLargest(int[] nums, int k) {quickSort(nums,0,nums.length - 1);return nums[k-1];}public void quickSort(int[] nums,int start,int end){//递归结束条件if(start >= end){return;}int mid = (start + end) / 2;swap(nums,start,mid);int index = partition(nums,start,end);quickSort(nums,start,index - 1);quickSort(nums,index + 1,end);}public int partition(int[] nums,int start,int end) {int i = start,j = end;int target = nums[start];while(i < j){while(nums[j] < target && i < j){j--;}nums[i] = nums[j];while(nums[i] >= target && i < j){i++;}nums[j] = nums[i];}//最后return i或者j位置上的元素都可以,因为打破while的时候i==jnums[j] = target;return j;}public void swap(int[] nums,int i,int j){int temp = nums[j];nums[j] = nums[i];nums[i] = temp;}
}

在这里插入图片描述
3、快速排序思想2(一次扫描交换两个到目标位置)

http://www.lryc.cn/news/621693.html

相关文章:

  • IStoreOS(OpenWrt)开启IPV6
  • 【已解决】在Spring Boot工程中,若未识别到resources/db文件夹下的SQL文件
  • 10--C++模板参数与特化详解
  • Linux Namespace隔离实战:dd/mkfs/mount/unshare构建终极沙箱
  • 基于CodeBuddy的2D游戏开发实践:炫酷大便超人核心机制解析
  • 云手机存储和本地存储的区别
  • Ant-Design AUpload如何显示缩略图;自定义哪些类型的数据可以使用img预览
  • 用3D打印重新定义骑行-中科米堆CASAIM自行车座椅个性化设计
  • Spring Ai 如何配置以及如何搭建
  • Cursor CLI 技术解析:免费调用 GPT-5 的命令行方案
  • Flink的状态管理
  • 项目篇------------网页五子棋(知识预备)
  • GPT 解码策略全解析:从 Beam Search 到 Top-p 采样
  • spring ai-openai-vl模型应用qwen-vl\gpt-文字识别-java
  • 自学大语言模型之Transformer的Tokenizer
  • 用GPT解释“GPT-5”是什么,有什么优势
  • Spring IOC容器在Web环境中的启动奥秘:深入源码解析
  • Grafana 与 InfluxDB 可视化深度集成(一)
  • Al大模型-本地私有化部署大模型-大模型微调
  • 算法学习远程访问:借助 cpolar 内网穿透服务使用 Hello-Algo
  • 以下是对智能电梯控制系统功能及系统云端平台设计要点的详细分析,结合用户提供的梯控系统网络架构设计和系统软硬件组成,分点论述并补充关键要点:
  • JavaScript 核心基础:类型检测、DOM 操作与事件处理
  • C++——分布式
  • 力扣 —— 二分查找
  • 【JAVA 基础入门】运算符详细介绍
  • 【软件设计模式】工厂方法与抽象工厂
  • 【办公类110-01】20250813 园园通新生分班(python+uibot)
  • 微信小程序 拖拽签章
  • GitHub 热榜项目 - 日榜(2025-08-15)
  • Redis核心架构