编写 Python 程序查找第 K 小元素2024 年 8 月 29 日 | 5 分钟阅读 问题是一个给定的整数数组,我们需要找到数组中第 K 小的元素,其中 K 是一个小于或等于数组长度的正整数。让我们看下面的例子。 示例 - 输入 输出 k'th smallest array element is 4 输入 输出 k'th smallest array element is 10 让我们用各种方法来解决这个问题。 方法 1:暴力破解法在此方法中,我们首先对给定数组进行排序。这里我们将使用冒泡排序算法,并使用列表切片获取第 K 小的元素。让我们理解下面的例子。 示例 - 输出 kth smallest array element is: 7 解释 - 在上面的函数中,我们定义了一个名为 find_k_smallest() 的函数,该函数使用简单的排序方法查找数组中第 K 小的元素。
在给定的示例中,输入数组是 [7, 10, 4, 3, 20, 15],而所需的第 3 小元素是第 3 小的 (k = 3)。运行 find_k_smallest() 函数后,输出将是 7,这是排序数组中的第 3 小元素。 因此,由于用于排序的嵌套循环,此实现的 time complexity 为 O(n2)。但是,我们将优化上述解决方案。 方法 2:使用 sort() 方法我们将使用内置的 sort() 方法。让我们理解下面的例子。 示例 - 输出 kth smallest array element is: 7 解释 - 函数 find_k_smallest() 接受三个参数:arr(输入数组)、n(数组的长度)和 k(所需第 K 小元素的索引)。 我们使用 sort() 方法将数组按升序排序。这将重新排列数组中的元素,使最小的元素位于索引 0,最大的元素位于最后一个索引。 对数组进行排序后,函数返回索引 k-1 处的元素。由于数组索引从 0 开始,因此第 K 小的元素将位于索引 k-1 处。 上述代码的总体 time complexity 为 O(n log n),其中 n 是数组的长度。 方法 3:使用最大堆我们将使用最小堆来解决这个问题。让我们理解下面的例子。 示例 - 输出 kth smallest array element is:7 解释 - 在上面的代码中,我们导入了 heapq 模块来处理堆。然后,我们创建空堆来存储数组的元素。将所有元素推入堆后,我们进入一个循环,提取最小元素 K 次。我们使用 heapq.heappop() 从堆中弹出并检索最小的元素。 kth_smallest 变量在从堆中提取元素时会跟踪第 K 小的元素。 最后,我们返回 kth_smallest 的值,这将是数组中第 K 小的元素。 上述代码的 time complexity 为 O(n),这是前述代码的优化版本。 方法 4:使用优先级队列为了使用优先级队列解决查找第 K 小元素的问题,我们可以利用 Python 的 queue 模块,特别是 PriorityQueue 类。以下是使用优先级队列的实现。让我们理解下面的例子。 示例 - 输出 kth smallest array element is: 7 解释 - 在上面的代码中,我们首先从 queue 模块导入 PriorityQueue 类,该类允许我们使用优先级队列。 find_k_smallest 函数接受两个参数:arr(输入数组)和 k(所需第 K 小元素的索引)。我们创建一个 PriorityQueue 类的新的 pq 实例。我们迭代数组中的每个元素,并使用 put() 方法将元素插入优先级队列。 插入元素后,我们检查优先级队列的大小 (pq.qsize()) 是否大于 k。如果是,我们使用 get() 方法从优先级队列中删除最小的元素。这确保了优先级队列在任何给定时间只包含 K 个最小的元素。 处理完所有元素后,我们使用 get() 方法从优先级队列中检索第 K 小的元素。 最后,我们返回检索到的第 K 小的元素。 |
有时在使用Python Shell时,我们得到杂乱无章的输出或编写了不必要的语句,我们希望出于其他原因清除屏幕。"cls"和"clear"命令用于清除终端(终端窗口)。如果您在IDLE中使用Shell,那么...
阅读 2 分钟
Firebase 是 python 提供的一个库,用于使用 Firebase 提供的各种服务,因此为了更好地理解 Firebase 库,我们需要首先了解 Firebase 及其提供的不同服务...
阅读 22 分钟
什么是箱线图?箱线图是使用箱体和一些垂直线可视化数据分布的一种方法。它被称为胡须图。数据可以分布在五个关键范围之间,如下所示:最小值:Q1-1.5*IQR 第 1 四分位数...
阅读 3 分钟
简介:Scrapy 是一个用 Python 编写的开源网络爬行和网络抓取框架。它允许开发人员构建和扩展网络爬虫,这些爬虫可以爬取网站、提取数据并将其存储为结构化格式,如 JSON、CSV 或 XML。Scrapy 提供了一个用于爬行的高级 API...
阅读 16 分钟
当我们获得大量数据集时,将数据表快速分成相等的机会然后单独处理每个数据帧将非常有益。这只有在数据帧上的操作是...
5 分钟阅读
简介:在本文中,我们将讨论 Deepchecks:测试机器学习模型 (Python)。一个成功且可靠的学习系统版本必须通过各个程度的成熟。它从记录系列和整理、准确分割事实以及正确地对版本进行教学、测试和验证开始...
阅读 6 分钟
In the ious tutorial, we have understood the concept of Distributed Computing and Introduction to Dask. We have also understood what Dask Cluster is and how to install Dask in addition to the introduction to the Dask Interface. Dask Interface As we have already discussed, Dask Interfaces have...
阅读27分钟
1. Kivy的安装 我们需要PyGame才能使用Kivy。PyGame是首批Python游戏开发包之一。注意:我使用Windows操作系统和Python。请查看Kivy在线文档以获取Mac OS的相关信息。我们将首先使用“pip”安装PyGame,然后安装Kivy。如果您有任何构建...
阅读 3 分钟
Python 中的 zlib 库:理解 Python zlib 库。zlib 是一个 Python 库,支持 zlib C 库,是用于 deflate 无损压缩算法的更高层次的泛化。zlib 库用于无损压缩,这意味着在压缩之间没有数据丢失...
阅读 6 分钟
网络爬虫是一种抓取网页并从中提取详细信息的过程。与为一个项目定期从网页复制和粘贴信息相比,网络爬虫可以有效地解决这个问题。但是,可用于网络爬虫的网站很少。有一些...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India