Leetcode NO.215 Kth Largest Element In An Array 数组中的第K个最大元素

FAST-LIO2实战:如何在无人机上部署并实现厘米级定位(附ROS配置全流程) 本文详细介绍了如何在无人机上部署FAST-LIO2激光雷达惯性里程计系统,以实现厘米级精确定位。内容涵盖从硬件选型(如激光雷达与机载计算机)、软件环境配置(ROS Noetic)、传感器标定,到FAST-LIO2参数调优、与PX4飞控集成以及实际飞行测试的全流程。重点解决了实时定位中的外参标定、数据同步等关键问题,为无人机在无GPS或复杂光照环境下提供稳定可靠的定位解决方案。 阅读详情

1.问题描述

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

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

2.测试用例

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

3.提示

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

4.代码

1.基于堆排序
code
/**
     * 基于堆排序
     *
     * @param nums nums
     * @param k    k
     * @return res
 */
public int findKthLargestWithBigHeapSort(int[] nums, int k) {
    int n = nums.length;
    int heapSize = n;
    //构建大顶堆
    buildBigHeapify(nums, heapSize);
    //删除第 n - k个元素
    for (int i = n - 1; i > n - k; i--) {
        exchangeArrayEle(nums, 0, i);
        heapSize--;
        maxHeapfiy(nums, 0, heapSize);
    }
    //返回堆顶即可
    return nums[0];
}


/**
     * 构建大顶堆
     * @param nums 数组
     * @param heapSize 堆大小
*/
private void buildBigHeapify(int[] nums, int heapSize) {
    for (int i = heapSize / 2 - 1; i >= 0; i--) {
        //递归构建
        maxHeapfiy(nums, i, heapSize);
    }
}

/**
     * 构建大顶堆
     * @param nums 数组
     * @param top 堆元素
     * @param heapSize 堆大小
*/
private void maxHeapfiy(int[] nums, int top, int heapSize) {
    int left = top * 2 + 1;
    int right = top * 2 + 2;
    int largest = top;

    if (right < heapSize && nums[right] > nums[largest]) {
        largest = right;
    }
    if (left < heapSize && nums[left] > nums[largest]) {
        largest = left;
    }
    if (top != largest) {
        exchangeArrayEle(nums, top, largest);
        maxHeapfiy(nums, largest, heapSize);
    }
}


/**
     * 交换数组元素
     * 临时变量法
     *
     * @param nums 数组
     * @param i 待交换元素i
     * @param j 待交换元素j
 */
public static void exchangeArrayEle(int[] nums, int i, int j) {
    Assert.assertNotNull(nums);
    int tmp = nums[i];
    nums[i] = nums[j];
    nums[j] = tmp;
}
复杂度
* 时间 O(nlogn)
* 空间 O(logn)
2.基于快速选择排序
code
/**
     * 基于快速选择排序
     * 时间 O(n) 证明过程可以参考《算法导论》9.2
     * 空间 O(nlongn)
     *
     * @param nums nums
     * @param k    k
     * @return res
 */
public int findKthLargestWithQuickSelectSort(int[] nums, int k) {
    return quickSelect(nums, 0, nums.length - 1, nums.length - k);
}

/**
     * 快速选择(单路)排序
     * @param nums 数组
     * @param start 起始元素位置
     * @param end 结束元素位置
     * @param k 查找位置
     * @return
 */
private int quickSelect(int[] nums, int start, int end, int k) {
    int partiton = randomPartiton(nums, start, end);
    if (partiton == k) {
        return nums[k];
    } else {
        return k < partiton ? quickSelect(nums, start, partiton - 1, k) : quickSelect(nums, partiton + 1, end, k);
    }
}

/**
     * 随机分区
     * @param nums 数组
     * @param start 起始元素位置
     * @param end 结束元素位置
     * @return
*/
private int randomPartiton(int[] nums, int start, int end) {
    int random = start + new Random().nextInt(end - start + 1);
    SortUtils.exchangeArrayEle(nums, start, random);
    return partition(nums, start, end);
}

/**
     * 双指针快排
     * @param nums 数组
     * @param start 起始元素位置
     * @param end 结束元素位置
     * @return
 */
private int partition(int[] nums, int start, int end) {
    int left = start, right = end;
    int povit = nums[start];
    while (left < right) {
        while (left < right && nums[right] >= povit) {
            right--;
        }
        while (left < right && nums[left] <= povit) {
            left++;
        }
        SortUtils.exchangeArrayEle(nums, left, right);
    }
    SortUtils.exchangeArrayEle(nums, left, start);
    return left;
}
复杂度
* 时间 O(n) 
* 空间 O(longn)
ZYNQ 7020 之 FPGA知识点重塑笔记一——串口通信 通信方式一般分为串行通信和并行通信。并行通信是指多比特数据同时通过并行线进行传送。这种传输方式通信线多、成本高,故不宜进行远距离通信,通常传输距离小于 30 米。串行通信是指数据在一条数据线上,一比特接一比特地按顺序传送的方式。这种运输方式通常节省传输线,大大降低使用成本,但数据传送速度慢。综上可知,串行通信主要应用于长距离、低速率的通信场合。本次实验我们主要讲解下串行通信。串行通信一般有2种通信方式:同步串行通信和异步串行通信。同步串行通信。 阅读详情

相关推荐

从机械臂示教到厨房做饭:ACT模仿学习如何让机器人更“人性化”?

本文探讨了ACT(Action Chunking with Transformers)模仿学习技术如何让机器人更“人性化”,特别是在厨房等复杂场景中的应用。通过动作分块(Action Chunking)和时态融合(Temporal Ensemble)技术,机器人能够像人类一样记忆和执行复杂任务,如烹饪。文章还分析了ACT在家庭场景中的落地挑战及其在康复医疗、柔性制造等领域的跨领域应用潜力。

weixin_30613343的博客 255

leetcode 215. Kth Largest Element in an Array | 215. 数组中的第K个最大元素(Java)

题目 https://leetcode.com/problems/kth-largest-element-in-an-array/ 题解 本题需要建立大顶堆。关于堆的数据结构,需要知道: 堆 什么是堆? 堆 是一棵 完全二叉树:即使它不是满二叉树,也是正在从左往右变满的过程中。 1)堆结构就是用数组实现的完全二叉树结构 2)完全二叉树中,如果每棵子树的 最大值都在顶部,是 大根堆 3)完全二叉树中,如果每棵子树的 最小值都在顶部,是 小根堆 4)堆结构的 heapInsert 与 heapify 操作

寒泉 5万+

ESP32搭配FT6236触摸屏:从芯片手册到完整I2C驱动代码的保姆级解析

本文详细解析了ESP32搭配FT6236触摸屏的I2C驱动开发过程,从芯片手册解读到完整代码实现。通过硬件架构分析、寄存器配置、I2C通信封装及触摸数据处理等步骤,提供了一套完整的驱动解决方案,帮助开发者快速掌握ESP32与触摸屏的交互技术。

weixin_29174385的博客 292

LeetCode215:Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.For example, Given [3,2,1,5,6,4] and k = 2, return 5.Note:

2582

YOLO模型使用jupyterlab的方式进行预测/推理(示例)

首先相信很多使用过python的人都或多或少地了解过这个应用。是一个开源Web应用程序,可让用户创建和共享包含实时代码、公式、可视化和叙述文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、等等。而Jupyter Lab则是Jupyter的下一代笔记本界面。是一个基于Web的交互式开发环境,用于Jupyter notebook、代码和数据。非常灵活,可支持数据科学、科学计算和机器学习领域的广泛工作。是可扩展和模块化的,其可编写插件来添加新组件并与现有组件相集成。

ocean00008899的博客 902

【AI大模型应用开发】【LangChain系列】实战案例6:利用大模型进行文本总结的方法探索,文本Token超限怎么办?

假设有一组文档(PDF、Notion页面、客户问题等),你想要总结内容。可以利用大模型来帮你。今天来系统看下利用大模型来对文本进行总结的方法,以LangChain的使用为例。

同学小张的博客 3749

LeetCode 215. Kth Largest Element in an Array 题解

本题是经典的 Top K 问题。多种解法:排序、堆、快速选择快速选择可以达到线性时间注意第 k 大和索引的转换。

cannonjinx的博客 4036

【小白深度教程 1.32】手把手教你从多视角图像进行 3D 重建(SfM 算法)

重建的目标是从一组照片中推导场景的几何结构,假设摄像机位置和内部参数是已知的或可以从图像集中猜测。 这是通过使用多个照片,在其中应用运动结构法(Structure from Motion,SfM)来解决像素级对应问题,部分地恢复3D信息来实现的。

2401_87064292的博客 2160

LeetCode | 0215. Kth Largest Element in an Array数组中的第K个最大元素【Python】

LeetCode 0215. Kth Largest Element in an Array数组中的第K个最大元素【Medium】【Python】【快排】【堆】 Problem LeetCode Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so...

Wonz 616

GD32H757的can通信配置,提供方案参考!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1836

Java零基础之多线程篇:线程间如何通信?

随着计算机技术的发展,多线程编程已经成为现代软件开发中的一个重要方向。在多线程编程中,线程间的通信是一个非常关键的问题。在Java开发语言中,Java提供了一些机制来实现线程间的通信,帮助开发者协调不同线程之间的执行顺序和数据交换。本文将介绍Java多线程编程中的线程间通信的相关知识。首先,我们将从简介开始,介绍线程间通信的基本概念和原理。然后,我们将通过源代码解析的方式,深入探讨Java中实现线程间通信的方法。接着,我们将给出一些应用场景案例,展示线程间通信在实际开发中的应用。

喵手的博客 1558

LeetCode //C - 215. Kth Largest Element in an Array

【代码】LeetCode //C - 215. Kth Largest Element in an Array。

Made in Code 968

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Leetcode】215. 数组中第 k 大的数字(Kth Largest Element in an Array)

Leetcode - 215 Kth Largest Element in an Array (Medium) Input: [3,2,1,5,6,4] and k = 2 Output: 5 解法一:排序 public int findKthLargest(int[] nums, int k) { Arrays.sort(nums); return nums[nums.leng...

厉兵秣码 256

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

leetcode 215. Kth Largest Element in an Array 数组中的第K大的元素

https://leetcode.com/problems/kth-largest-element-in-an-array/ 将数组看为没有调整到位的最大堆,由于堆是完全二叉树,因此根节点与子节点的下标存在对应关系。 每次从堆中取出最大值,将其放至根节点,再与最后一个节点互换位置,然后将其从堆删除。 class Solution { public: int findKthLar...

rock4you 269

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Leetcode 215 Kth Largest Element in an Array 数组中第k大的元素

在一个无须数组中找出第k大的元素。

(ง •̀_•́)ง 1447

【快排】数组第k大元素 LeetCode - 215. Kth Largest Element in an Array

  快排的详细总结可以看   快排的思想就是,每次选一个 pivot(比如最后一个数),然后将比它小的放它左边(或者右边),把比它大的放他右边(或者左边),相当于每次排好一个数,然后递归的排他左右两部分,这个数自己就不会再动了。   面试时经常回问的一道题就是,找出一个数组第 k 大的元素: LeetCode - 215. Kth Largest Element in an Array Find...

Bob__yuan的博客 353

leetcode 215: Kth Largest Element in an Array

leetcode 215: Kth Largest Element in an Array

西施豆腐渣 1万+

LeetCode 215:Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element. For example, Given [3,2,1,5,6,4] and k = 2, return 5.

哈哈的个人专栏 3871

LeetCode—215.数组中的第K个最大元素(Kth Largest Element in an Array)——分析及代码(C++)

LeetCode—215.数组中的第K个最大元素[Kth Largest Element in an Array]——分析及代码[C++] 一、题目 二、分析及代码 1. 排序 (1)思路 (2)代码 (3)结果 2. 优先队列 (1)思路 (2)代码 (3)结果 3. 快速排序(优化前) (1)思路 (2)代码 (3)结果 4. 快速排序(优化后) (1)思路 (2)代码 (3)结果 三、其他 一、题目 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是

江南土豆的博客 343

Leetcode-215. Kth Largest Element in an Array

地址:https://leetcode.com/problems/kth-largest-element-in-an-array/ 描述: Find thekth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth...

Lost2013的博客 210

【小白爬Leetcode215】2.6 数组中的第K个最大元素 Kth Largest Element in an Array

【小白爬Leetcode215】2.6 数组中的第K个最大元素 Kth Largest Element in an Array题目Description中文描述思路一 最朴素的解法,把整个数组排序思路二 最小二叉堆(最简洁解法)思路三 快速选择(最优解法) Leetcode 215 medium\color{#FF6347}{medium}medium 点击进入原题链接:Leetcode215 数组中的第K个最大元素 Kth Largest Element in an Array 题目 Descrip

weixin_41604040的博客 274

[leetcode] 215. Kth Largest Element in an Array 解题报告

题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/ Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth dis

小榕流光的专栏 2548

【leetcode】215. Kth Largest Element in an Array

215.Kth Largest Element in an Array Find thekth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element. Example 1: Input:...

lemonade13的博客 164

【LeetCode】215. Kth Largest Element in an Array 数组中的第K个最大元素(Medium)(JAVA)

【LeetCode】215. Kth Largest Element in an Array 数组中的第K个最大元素(Medium)(JAVA) 题目地址: https://leetcode.com/problems/kth-largest-element-in-an-array/ 题目描述: Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted ord

qq_16927853的博客 196

LeetCode215 Kth Largest Element in an Array 数组中的第K个最大元素

problem description Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element. Example 1: Input: [3,2,1,5,6,4] and k...

地山谦的博客 171

leetcode 215. Kth Largest Element in an Array

目录 一、问题分析 二、代码实现 1、排序 采用内置排序 采用冒泡排序 基数排序 2、堆 采用大顶堆 采用小顶堆 3、快速选择 递归版本 迭代版本 将输入数组随机化 采用中间下标的元素作为参照元素 https://leetcode.com/problems/kth-largest-element-in-an-array/ 返回数组中第k大的元素 一、问...

小景的博客 699
上一篇: Leetcode NO.136 Single Number 只出现一次的数字
下一篇: Leetcode NO.75 Sort Colors 颜色分类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值