【LeetCode】每日一题:数组中的第K大的元素

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

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

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

解题思路

第一种是快排,快排逻辑是以一个元素作为哨兵,通过头尾指针逼近和交换元素的方法找到该哨兵的位置,此题中额外使用k进行剪枝。

第二种思路是使用堆heapify,这种方式会默认生成一个大根堆,可以通过"ListNode.lt = lambda a, b: a.val < b.val # 让堆可以比较节点大小",然后直接使用heappop返回当前最小值。

AC代码

python 复制代码
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        # def quicksort(nums, l, r, k):
        #     if l == r:
        #         return nums[k]
        #     i, j, key = l, r, nums[l]
        #     while i < j:
        #         while nums[i] < key: i += 1
        #         while nums[j] > key: j -= 1
        #         if i < j:
        #             nums[i], nums[j] = nums[j], nums[i]
        #     return quicksort(nums, l, j, k) if k <= j else quicksort(nums, i+1, r, k)

        # return quicksort(nums, 0, len(nums) - 1, k)

        heapify(nums)
        temp = 0
        for _ in range(len(nums) - k + 1):
            temp = heappop(nums)
        return temp    
相关推荐
GPU实战笔记19 分钟前
云端 Python 开发:JupyterLab 还是 VS Code Remote-SSH?
python·vs code·jupyterlab·remote-ssh·远程开发
狗狗狗狗狗乐啊44 分钟前
搭一个 AI 对话工作台 AChat:从 0 到可用的完整记录(一)
python·react.js·ai编程
白猫不黑1 小时前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
kuuailetianzi2 小时前
Python初识:定位、优势与发展历程
python
guoran_shini2 小时前
LLM微调-训练垂类问答模型
python·lora·sft
basketball6162 小时前
Python FastAPI 介绍以及常用方法
python·fastapi·vllm·ai infra
论文复现现场2 小时前
企业知识库 RAG 用什么模型便宜?GLM-5.3-Flash 长文本 API 实测
python·rag·企业知识库·大模型api·glm-5.3-flash
梦在远山后3 小时前
从手写 Loop 到可恢复 Runtime:用 LangGraph、PostgreSQL Checkpoint 与 AG-UI 跑通中断恢复
python·langchain·agent
INGNIGHT3 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
Yolanda_20223 小时前
8.tensorboard的使用
python