LeetCode-215. 数组中的第K个最大元素【数组 分治 快速选择 排序 堆(优先队列)】

LeetCode-215. 数组中的第K个最大元素【数组 分治 快速选择 排序 堆(优先队列)】

  • 题目描述:
  • 解题思路一:排序
  • 解题思路二:快速选择
  • 解题思路三:0

题目描述:

给定整数数组 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

解题思路一:排序

使用编程语言的内置排序算法对数组 nums 进行排序,然后返回第 N−k 个元素即可。

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

时间复杂度:O(nlogn)
空间复杂度:O(logn)

解题思路二:快速选择

一种解决方案是使用「三路划分」,即每轮将数组划分为三个部分:小于、等于和大于基准数的所有元素。这样当发现第 k 大数字处在“等于基准数”的子数组中时,便可以直接返回该元素。

为了进一步提升算法的稳健性,我们采用随机选择的方式来选定基准数。

class Solution:def findKthLargest(self, nums, 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)if k <= len(big):# 第 k 大元素在 big 中,递归划分return quick_select(big, k)if len(big) + len(equal) < k:# 第 k 大元素在 small 中,递归划分return quick_select(small, k - len(big) - len(equal))# 第 k 大元素在 equal 中,直接返回 pivotreturn pivotreturn quick_select(nums, k)

时间复杂度:O(n)
空间复杂度:O(logn)

解题思路三:0


时间复杂度:O(n)
空间复杂度:O(n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI技术创业机会之智慧城市与智慧交通

人工智能(AI)技术的创新与发展为智慧城市与智慧交通领域带来了革命性的变革,为创业者创造了大量创新与创业机会。以下详述了智慧城市与智慧交通背景下AI技术的创业机会及其具体细节与内容,以5000字篇幅深入剖析各细分领域,为有志于投身这一领域的创业者提供全面、深入的商…

Vue-ts项目导入Js文件方法-书写提示无法找到模块“XXXX”的声明文件-配置说明

提示 无法找到模块“/filter/filter”的声明文件。“d:/code/byWork/mixmarvel/SendAssetsClient/src/filter/filter.js”隐式拥有 "any" 类型。 解决方法 修改 tsconfig.json {"compilerOptions": {"target": "esnext","modu…

OneFlow深度学习框架介绍

OneFlow是一个开源的深度学习框架&#xff0c;旨在为用户提供高效、易用的工具来进行深度学习模型的开发、训练和部署。以下是一些OneFlow框架的特点和优势&#xff1a; 高效性能&#xff1a; OneFlow针对大规模深度学习模型进行了优化&#xff0c;具有优秀的计算性能和内存管理…

Linux Shell 比较运算有哪些,以及怎么用

Linux Shell 比较运算有哪些&#xff0c;以及怎么用 在 Linux Shell 脚本编程中&#xff0c;进行算术比较是常见的需求&#xff0c;特别是在编写条件判断语句时。Shell 提供了一系列的算术比较操作符&#xff0c;这些操作符通常用在 if、while 等语句中&#xff0c;以便进行数…

程序员如何搞副业?

程序员不仅拥有将抽象概念转化为实际应用的能力&#xff0c;还通常具备强大的逻辑思维和问题解决能力。然而&#xff0c;许多程序员并不满足于仅仅在一家公司工作&#xff0c;他们渴望通过副业来实现个人价值的最大化&#xff0c;增加收入&#xff0c;甚至探索自己的创业梦想。…

前端及nodejs后端面试经验

目录 前端双向绑定如何实现自定义指令如何实现promise的执行顺序父子组件的信息传递cookies&#xff0c;session&#xff0c;webStoragevuex回流和重绘指令watch和watchEffect的区别watch和computed的区别vue3新功能Composition APIproxy和definePropertyTeleport 请求post和pu…

RIP配置不求人:手把手教你配置RIP路由

#教育优质作者发文挑战赛# 大家好&#xff0c;今天给同学们介绍一下RIP基本功能相关配置 01、基本概念 RIP是一种基于距离矢量&#xff08;Distance-Vector&#xff09;算法的协议&#xff0c;它使用跳数&#xff08;Hop Count&#xff09;作为度量值来衡量到达目的地址的距离…

耐压40V、输出电压1.23-37V可调,适用于工控主板、TV板卡、安卓主板、车载功放电源等产品方案应用。

一、应用领域 适用于工控主板、TV板卡、安卓主板、车载功放电源等产品方案应用。 二、功能介绍 D1509是一款输入耐压40V、输出电压1.23-37V可调、输出电流最大2.0A的高效率、高精度DC-DC芯片&#xff0c;其输出电压有固定3.3V、5.0V和12.0V的版本&#xff0c;可以为客户省去…

【2024】Rancher的安装与介绍

———————————————————————————— 记录一下rancher的学习与使用过程 本部分内容包括rancher的介绍、特点、与k8s关系和部署等内容 ———————————————————————————— Rancher是什么&#xff1f; 简单来说&#xff0c;Ranc…

item_password获得淘口令真实urlAPI接口输入淘口令代码获取淘口令url

要获取淘口令真实url&#xff0c;首先需要注册一个Api Key和Api Secret。接下来&#xff0c;可以使用淘口令API接口来获取淘口令的真实url。 item_password-获得淘口令真实url 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;s…

BIDI的单芯双向光模块是在用哪里的?

为什么要选择BIDI光模块&#xff1f; BIDI光学模块最明显的优点&#xff0c;如SFP BIDI光学模块或SFP BIDI光学模块&#xff0c;可以减少光纤跳线面板上的端口数量&#xff0c;节省光纤布线基础设施的成本&#xff0c;减少布线空间&#xff0c;方便光纤的管理&#xff0c;减少…

什么是电子邮件加密?电子邮件加密有几种类型?

在当今数字时代&#xff0c;电子邮件已经成为人们日常生活中不可或缺的沟通工具&#xff0c;据相关数据统计&#xff0c;全球每天发送的电子邮件数以亿计&#xff0c;而这些邮件里面通常包含了姓名、地址、个人身份信息 (PII)、登录凭证、财务信息、法律合同、知识产权等有价值…

ssh: Could not resolve hostname xxx: Name or service not known

参考文章:https://blog.csdn.net/bewhyw/article/details/134452826 修改etc/hosts中的文件&#xff0c;加入所有主机的地址映射即可&#xff1a; vi /etc/hosts

每日一题:寻找两个正序数组的中位数(Olog(m+n))

给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3], nums2 [2] 输出&#xff1a;2.00000 解释&#xff1a;合并数组 [1,2,3] &#xff0c…

1.Swift基础控件:TableView列表

Swift TalbeView列表的使用 一、简介 在 iOS 开发中&#xff0c;UITableView 是一个常用的界面组件&#xff0c;用于显示列表型数据。UITableView 可以展示大量数据&#xff0c;并支持滚动、分组、选择等功能&#xff0c;是开发 iOS 应用中常见的组件之一。 以下是 UITableV…

【LeetCode热题100】198. 打家劫舍(动态规划)

一.题目要求 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房…

AI智慧医疗:探索机器学习在医疗保健中的应用与进展

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Physics-Informed Neural Networks (PINN)

传统的数值模拟方法通常基于有限元、有限差分或有限体积等技术&#xff0c;它们需要构建网格并对物理方程进行离散化处理。然而&#xff0c;这些方法在处理复杂的几何形状、边界条件变化或多物理场耦合等问题时可能面临挑战。此外&#xff0c;它们通常需要大量的计算资源和时间…

web3.0入门及学习路径

Web3是指下一代互联网的演进形式&#xff0c;它涉及一系列技术和理念&#xff0c;旨在实现去中心化、开放、透明和用户主导的互联网体验。Web3的目标是赋予用户更多的控制权和数据所有权&#xff0c;并通过区块链、加密货币和分布式技术来实现。 一、特点 去中心化&#xff1…

vue使用elementui组件的的对话框;使用ref

1.第一步&#xff0c;先在父组件中引用&#xff0c;设置ref的值 <el-dialog :visible.sync"dialogEditVisible"append-to-body width"1000px" title"编辑":close-on-click-modal"false"><dialog-edit v-if"dialogEditV…