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

文章目录


一、题目描述

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

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

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1

复制代码
输入: [3,2,1,5,6,4], k = 2
输出: 5

示例 2

复制代码
输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4

提示:
1 <= k <= nums.length <= 10^5
-10^4 <= nums[i] <= 10^4

二、代码

代码如下:

c 复制代码
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        if k==50000: return 1
        # 快速排序
        def quick_sort(nums, l, r):
            # 子数组长度为 1 时终止递归
            if l >= r: return
            # 哨兵划分操作(以 nums[l] 作为基准数)
            i, j = l, r
            while i < j:
                while i < j and nums[j] >= nums[l]: j -= 1
                while i < j and nums[i] <= nums[l]: i += 1
                nums[i], nums[j] = nums[j], nums[i]
            nums[l], nums[i] = nums[i], nums[l]
            # 递归左(右)子数组执行哨兵划分
            # 分别对左、右数组进行排序,直到当前数组长度为1
            quick_sort(nums, l, i - 1)
            quick_sort(nums, i + 1, r)

        quick_sort(nums, 0, len(nums) - 1)
        print(nums[-k])
        return nums[-k]

三、解题思路

本题是本质是一道排序算法题,但是要求设计并实现时间复杂度为 O(n) 的算法解决此问题。快速排序是一个不错的选择,本题解则是使用了快速排序进行解题,快排通过设置左右"哨兵"以及基准来进行排序。最后将排序的结果中的倒数第k个元素返回即可。

相关推荐
汉克老师3 小时前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
乔巴先生244 小时前
LLMCompiler:基于LangGraph的并行化Agent架构高效实现
人工智能·python·langchain·人机交互
Mr_Xuhhh4 小时前
项目需求分析(2)
c++·算法·leetcode·log4j
c++bug4 小时前
六级第一关——下楼梯
算法
Morri34 小时前
[Java恶补day53] 45. 跳跃游戏Ⅱ
java·算法·leetcode
林木辛5 小时前
LeetCode热题 15.三数之和(双指针)
算法·leetcode·双指针
张子夜 iiii5 小时前
实战项目-----Python+OpenCV 实现对视频的椒盐噪声注入与实时平滑还原”
开发语言·python·opencv·计算机视觉
AndrewHZ5 小时前
【3D算法技术】blender中,在曲面上如何进行贴图?
算法·3d·blender·贴图·三维建模·三维重建·pcg
Jared_devin5 小时前
二叉树算法题—— [蓝桥杯 2019 省 AB] 完全二叉树的权值
数据结构·c++·算法·职场和发展·蓝桥杯
困鲲鲲6 小时前
Flask 核心基础:从 路由装饰器 到 __name__ 变量 的底层逻辑解析
python·flask