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

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

题目

给定整数数组 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 <= 105
  • 104 <= nums[i] <= 104

题解一(面试中不要使用)

class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:return sorted(nums)[len(nums)-k]

题解二

class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:# 快速排序的变种,用于在未排序列表中查找第k小/大的元素def quick_select(nums,k):# 随机选择基准数pivot = random.choice(nums)big, equal, small = [],[],[]# 将大于、小于、等于pivot的元素划分至big,small,equal中for num in nums:if num>pivot:big.append(num)elif num<pivot:small.append(num)else:# 这里也可以用equal.append(num),不影响返回结果pivot=numif k <= len(big):# 第k大元素在big中,递归划分return quick_select(big,k)if k > len(nums)-len(small):# 表示k在small内# 第k大元素在small中,递归划分return quick_select(small,k-len(nums)+len(small))# 第k大元素在equal中,递归划分return pivotreturn quick_select(nums,k)

解题思路,来自leetcode大佬

  • 快速排序的核心包括“哨兵划分” 和 “递归” 。

哨兵划分: 以数组某个元素(一般选取首元素)为基准数,将所有小于基准数的元素移动至其左边,大于基准数的元素移动至其右边。
递归: 对 左子数组 和 右子数组 递归执行 哨兵划分,直至子数组长度为 1 时终止递归,即可完成对整个数组的排序。
下图展示了数组 [2,4,1,0,3,5] 的快速排序流程。
在这里插入图片描述

http://www.dtcms.com/a/594194.html

相关文章:

  • 巩义网站推广优化网站开发的软件环境
  • K8s资源控制器的实战
  • ppt超链接网站怎么做创建网站的六个步骤
  • Spring AI Alibaba脉络:企业级智能体框架
  • 网站建设一年多少钱贵阳小程序定制开发
  • 阿里云虚拟主机做淘客网站网页设计实训总结模板
  • 时序数据分析:Python爬取新浪财经频道新闻并绘制趋势图
  • 福州网站建设流程深圳公共资源交易中心
  • 东莞网站公司哪家好当下 如何做网站赚钱
  • 5.会话列表测试用例
  • 咨询公司网站设计电商网站商品中心设计方案
  • 电子商务网站版面布局天津北京网站建设公司哪家好
  • Java基础——集合进阶8
  • README查看会议信息
  • 云校网站建设网站优化排名易下拉系统
  • 基础算法精讲 09|递归|操作型|计算型
  • OpenCSG 2025年10月月报:战略合作、学术突破、H200上新与社会责任
  • Lua基本语法
  • 关于网站建设的请示范文东莞网站优化一般多少钱
  • CI/CD 全流程指南:从概念到落地的持续交付实践
  • 软件生产的“高速公路网”:深入浅出理解CI/CD的核心流程
  • 网站列表设计东城企业网站建设
  • 医学类数据集目标检测分割分类数据集汇总介绍
  • 2017网站建设傻瓜式网站开发
  • 开发环境搭建之JDK11+maven3.9.8+tomcat9安装
  • phpcmsv9手机网站模板wordpress file upload
  • Socket编程核心API详解
  • 网站关键词排名怎么提升app开发外包要多少钱
  • 使用 Node.js 开发 Telegram Bot 完整指南
  • 招聘网站代理做网站提供服务器吗