LeetCode 215 数组中的第K个最大元素(Kth Largest Element in an Array) python实现

leetcode215数组中的第K个最大元素,python 代码+思路 """ 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 """ ''' 思考: 创建一个k长度的最小堆。然后先放进去k个,然后大于于堆顶就替换 ''' import heapq # 在这里顺便复习python堆的用法 # heappush(heap, x) 将x压入堆中 # heappop 立即下载

题目描述

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

示例 1:

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

示例 2:

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

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

分析:

受启发于快速排序,每次排序完检查参考值的位置:

  • 如果位置正好等于k,则返回;
  • 否则,判断是继续从左边还是右边寻找k。

时间复杂度:
递归时,每层时间复杂度为O(n),仅第一层需左右两部分遍历,后面只需要遍历一半。
n+n/2+n/4+…+1 < 2n,所以总的时间复杂度为O(n)。

python代码:

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        return self.helper(nums, 0, len(nums)-1, k)
    
    def helper(self, nums, l, r, k):
        if l == r:
            return nums[l]
        i, j = l, r
        p = nums[i]
        while i < j:
            while i < j and nums[j] <= p:
                j -= 1
            if i < j:
                nums[i] = nums[j]
                i += 1
                
            while i < j and nums[i] >= p:
                i += 1
            if i < j:
                nums[j] = nums[i]
                j -= 1
        if i + 1 == k:
            return p
        elif i + 1 < k:
            return self.helper(nums, i + 1, r, k)
        else:
            return self.helper(nums, l, i - 1, k)

附快速排序代码:

def quick_sort(lst):
    helper(lst, 0, len(lst)-1)

def helper(lst, l, r):
    if l >= r:
        return
    i = l
    j = r
    p = lst[i]
    while i < j:
        while i < j and lst[j] >= p:
            j -= 1
        if i < j:
            lst[i] = lst[j]
            i += 1
        while i < j and lst[i] <= p:
            i += 1
        if i < j:
            lst[j] = lst[i]
            j -= 1
    lst[i] = p
    helper(lst, l, i-1)
    helper(lst, i+1, r)

更多题目包括leetcode、牛客网、各种排序算法解法参见个人GitHub,持续更新中,欢迎star ~~

https://github.com/PemLer/Journey_of_leetcode


三款云电脑实测:ToDesk、青椒云、顺网云谁更适合AIGC新手?附详细配置对比 本文针对AIGC新手,深度实测了ToDesk云电脑、青椒云和顺网云三款云电脑服务。通过对比上手门槛、内置生态、操作引导及成本,发现ToDesk云电脑凭借一键启动、丰富预置模型和直观引导,为新手提供了最接近“开箱即用”的零门槛AIGC创作体验,是快速入门AI绘画的高效选择。 阅读详情

相关推荐

Remote ID的调制解调FPGA实现

Remote ID源于航空安全需求,例如在无人机密集区域实现设备跟踪和防碰撞。它类似于航空领域的ADS-B系统,但针对低空飞行器。Remote ID系统通常工作在特定频段(如2.4 GHz或5.8 GHz),通过无线链路广播数据包,包含设备ID、经纬度、高度和速度等信息。调制解调过程确保这些数据在噪声环境中可靠传输。例如,标准如ASTM F3411定义了Remote ID的协议框架,其中调制解调是关键物理层组件。

yulongfenghu的博客 1506

[LeeCode] 215. Kth Largest Element in an Array (Python)

215.Kth Largest Element in an Array Medium 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: [3,2,1,5,6,4] and k = 2 Output: 5 Example 2: ..

热爱编程,热爱技术 219

Python程序—定子故障三相永磁同步电动机振动与电流数据集

1.0 kW 电机匝间短路故障数据: 正常匝间短路振动数据: 匝间短路故障,严重度为2.26%: 匝间短路故障,严重度为2.70%: 匝间短路故障,严重度为3.35%: 匝间短路故障,严重度为4.41%: 匝间短路故障,严重度为6.48%: 匝间短路故障,严重度为12.17%: 匝间短路故障,严重度为21.69%1.5 kW 电机匝间短路故障数据: 正常匝间短路振动数据: 匝间短路故障,严重度为1.57%: 匝间短路故障,严重度为1.88%: 匝间短路故障,严重度为2.34%

m0_66465741的博客 1317

力扣刷题215.数组中的第K个最大元素(python)

215.数组中的第K个最大元素 题目描述:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-...

scp_6453的博客 1045

【Android】汽车电源管理:深入解析CarPowerManager与Suspend To RAM的交互机制

本文深入解析了Android Automotive OS中CarPowerManager与Suspend To RAM(深度睡眠)的交互机制。详细阐述了从车辆发出睡眠请求,到CarPowerManagementService协调应用状态,最终通过内核进入低功耗睡眠的完整流程,并探讨了唤醒机制、开发者实践及功耗优化策略,为车机应用开发与系统优化提供关键指导。

weixin_28339967的博客 289

材料仿真软件:Materials Studio_(14).电学性质计算

设置计算参数,包括 k 点网格、交换相关泛函等。

kkchenjj的博客 1863

【leetcode215】数组中的第K个最大元素——python堆排序

【leetcode215】数组中的第K个最大元素——python堆排序解法

weixin_42898871的博客 479

姿态传感器/陀螺仪之IIS2DLPC 应用驱动程序设计

* 转换为°C单位 (参考温度为25°C,灵敏度为16 LSB/°C) */

corlin6688的博客 219

python leetcode 215. 数组中的第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 针对本题,第一想法:先从大到小排序,然后取第K个值。我掌握最熟练的冒泡排序,但是它的时间复杂度太高了,为O(n^2),运行完了提示时间超...

qq_33655102的博客 779

MFC Windows 程序设计[105]之彩色滚动条(附源码)

MFC是微软公司提供的一个类库(class libraries),用以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力...... 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。

hnjzfwy的博客 518

【DRAM存储器六十八】DDR5介绍--DQS Interval Oscillator—动态时序校准利器

DDR5内存采用DQS间隔振荡器(DQSIntervalOscillator)技术应对高速数据传输中的时序漂移问题。该技术通过测量DQS信号在可编程时间窗口内的振荡次数(16位计数值),动态监测温度/电压变化导致的DQS-DQ延迟偏移。控制器通过MPC命令启停振荡器,读取MR46/MR47寄存器获取计数值,并与基准值对比来调整DQS相位,确保数据采样窗口始终处于最佳位置。该机制使DDR5在8400MT/s高速率下仍能保持数据可靠性,有效补偿±0.48tCK的时序偏移。

highman110的博客 149

leetcode 215. 数组中的第K个最大元素(python)

215. 数组中的第K个最大元素【中等】 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数...

天真不无邪,hello和world 632

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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 615

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

leetcode 215: Kth Largest Element in an Array

leetcode 215: Kth Largest Element in an Array

西施豆腐渣 1万+

【leetcode笔记】Python实现215.Kth Largest Element in an Array

题目: 快速选择、堆排序:https://leetcode.com/problems/kth-largest-element-in-an-array/description/ 这里我们使用堆排序方法 这里讲解堆的定义特别清楚:https://blog.youkuaiyun.com/u013384984/article/details/79496052 下面是简化版: 堆的定义 大顶堆:每个节点的值都不大于...

Jack_Kuo的博客 900

Leetcode 215. Kth Largest Element in an Array (python+cpp)

Leetcode 215. Kth Largest Element in an Array题目解法1:brutal force解法2:heap,最小堆解法3:快速选择 题目 解法1:brutal force 每次取出一个最大的,直到取到第K个为止。时间复杂度n*n class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: for i in range(k-1):

qq_37821701的博客 507

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

文章目录直接排序 O(nlog⁡n)+O(1)O(n\log n)+O(1)O(nlogn)+O(1)JavaC++PythonGo最大堆/最小堆 O(nlog⁡k)+O(k)O(n\log k)+O(k)O(nlogk)+O(k)JavaC++PythonGoPartitation O(n)∼O(n2)+O(1)O(n)\sim O(n^2)+O(1)O(n)∼O(n2)+O(1)JavaC++PythonGoQuickSelect O(n)∼O(n2)+O(1)O(n)\sim O(n^2)+O(1)O

wineandchord 236

leetcode 215 Kth Largest Element in an Array 数组中的第K个最大元素 python 一行代码

所有Leetcode题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。 ''' 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 ...

Jasmine_dream 303

215. Kth Largest Element in an Array

题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/submissions/ 代码 class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: """ :type nums: List...

SummerHmh的博客 249

[leetcode] 215. Kth Largest Element in an Array @ python

原题 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 = 2 Output: 5 Exa...

闲庭信步 503

Top K 问题的最优解 - 快速选择算法(图解详细教程)

python实现快速选择算法(Quickselect)

rainMan的博客 8064

【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. N

aliceyangxi1987的博客 687

【LeetCode】215. Kth Largest Element in an Array

我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! 知乎主页:https://www.zhihu.com/people/MicrostrongAI/activities Git...

Microstrong 519

[LeetCode] 215. Kth Largest Element in an Array @ python

一.题目: 给定一个数组,找到其中第k大的元素 二.解题思路: (1)直接使用heapq库中的函数,代码很简单: class Solution(object): def findKthLargest(self, nums, k): """ :type nums: List[int] :type k: int :rtype: i...

tmfighting的博客 334
上一篇: [leetcode 543] 二叉树的直径 Diameter of Binary Tree (python)
下一篇: python中你可能不知道的事
Elmerr
博客等级 码龄12年 178粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值