编写 Python 程序在排序数组中搜索元素17 Mar 2025 | 4 分钟阅读 在本教程中,我们将解决排序数组中的一个有趣问题。但有一个转折;给定数组可能在某个索引位置被旋转。这意味着排序数组的几个元素可能在给定的索引处被旋转。为了更好地理解,让我们先理解下面的问题陈述。 问题陈述 -给定一个升序排序且包含不重复值的列表 list1。它可以在一个未知的枢轴索引 k (1 <= k < list1.length) 处旋转,使得生成的数组为 [list1[k], list1[k+1], ..., list1[n-1], list1[0], list1[1], ..., list1[k-1]] (0 索引)。 假设给定数组是 [4, 5, 6, 7, 8, 9, 10, 11],并可能在枢轴索引 3 处旋转,变成 [8, 9, 10, 11, 4, 5, 6, 7]。 给定一个可能被旋转后的数组 list1 和一个整数 target,返回 target 的索引;如果不存在,则返回 -1。 示例 - 1 输入: list1 = [4, 5, 6, 7, 0, 1, 2], target = 0 输出 4 示例 - 2 输入: list1 = [4, 5 ,6, 7, 0, 1, 2], target = 3输出: -1 现在我们将找到解决此问题的最佳方法。这是一个有点棘手的问题,但如果我们分解解决方案,我们可以轻松编写代码。让我们理解以下解决方案。 解决方案对于搜索相关的问题,我们首先会想到实现二分查找算法,因为它是一种简单且效率很高的搜索元素算法。然而,给定的列表必须是已排序的,在我们的例子中,数组是已排序但被旋转了。让我们看下面的数组。 list1 = [4, 5, 6, 7, 0, 1, 2] 如果我们仔细观察,我们可以看到正常数组将是 [0, 1, 2, 4, 5, 6, 7],并且它在索引 3 处被旋转了。 现在可以看到数组被分成两部分,左部分是排序的 [4, 5, 6, 7,],右部分是 [0, 1, 2] 让我们用图来表示,以便利用二分查找算法来解决这个问题。 我们绘制一个基本图,该图具有连续的基本递增线,不一定是线性的,但始终是递增的。 ![]() 因此,新图将如下形成。 ![]() 现在我们可以找到一个模式来帮助我们编写解决方案。众所周知,二分查找有三个指针 - 左、右和中。数组中有两个部分,它们都独立排序。众所周知,二分查找有三个指针 - 左、右和中。 假设在给定数组 [4, 5, 6, 7, 0, 1, 2] 中,目标值为 0,中点为 6,这意味着如果目标值大于 6,它就不会出现在左侧。 现在我们可以在右侧搜索元素。如果目标值小于中点怎么办? 在这种情况下,4、5 都小于 6,0、1、2 也都小于 6,那么我们如何知道应该在哪一侧搜索呢? 所以这里我们检查列表的最左侧值,如果它小于目标值,那么我们就不需要再在左侧搜索它了。 搜索将从 mid + 1 开始放在右侧。但如果目标值大于最左侧的值,我们就在左侧搜索元素。 现在考虑中值为 1;小于 1 的唯一元素是 0。所以搜索将在左侧进行。我们检查最左侧的值并将其与目标值进行比较,如果它大于最右侧的值。让我们用 Python 代码实现它。 注意 - 要检查中值属于左侧部分还是右侧部分,我们可以通过比较最左侧的值与中值来判断。如果中值大于最左侧的值,则它一定属于左侧部分,反之亦然。Python 代码 -输出 The element is at the 4 index 这看起来可能有点复杂,但一旦你理解了这个概念,就会清楚。 时间复杂度时间复杂度为 O(logN),因为二分查找需要 log n 次比较来找到元素。空间复杂度为 O(1),因为我们不需要额外的空间。 |
数据科学在每个电子商务业务中的著名用途之一是推荐系统。为了增加时尚领域的销售额和用户参与度,一家电子商务公司希望向其用户推荐最流行的时尚。Myntra 是著名的电子商务网站之一,以其......而闻名。
阅读 22 分钟
创建图形用户界面 (GUI) 应用程序的奇妙之处在于,我们可以按照我们想要的方式自定义它们。有各种可供定制的功能,从文本字体到背景颜色。在接下来的教程中,我们将学习...
阅读 15 分钟
简介 图形用户界面 (GUI) 是现代编程应用程序的基本组成部分,通过视觉元素增强用户体验。Tkinter 是一个流行的 Python GUI 库,它使开发人员能够创建交互式和易于使用的应用程序。其中一个功能为应用程序增添了专业感和视觉吸引力的是...
阅读 3 分钟
通过组合两个或多个不同的推荐系统,混合推荐系统提供了一种全面而周到的方法。它通过利用各种方法的优势并提供有益的用户体验,力求为客户提供更精确、更多样化和个性化的建议。本教程适用于...
阅读9分钟
Python 是一种功能强大且先进的编程语言,我们可以使用 Python 执行各种任务和功能。我们可以轻松完成的一项任务就是使用 Python 程序打开一个 URL。在本教程中,我们将...
5 分钟阅读
Rich 库是一个强大的 Python 库,为终端应用程序提供了广泛的文本格式化和样式选项。使用 Rich,您可以为文本输出添加颜色和样式,创建表格和进度条,甚至在终端中显示图像和动画...
阅读9分钟
组合科学中的一个排列组合的错排是其组成部分出现在其原始位置的组成部分。例如,对于序列 [1, 2, 3, 4],一个错排将是 [2,...
阅读 4 分钟
我们已经讨论过边缘计算及其在 ious 教程中的各种功能。让我们扩展一下在边缘计算项目列表想法第一部分中讨论的想法。用于车辆边缘计算的深度强化学习型卸载调度项目描述:一种新的计算范式,称为车辆云…
阅读 12 分钟
在本教程中,我们将学习 TOML,即 Tom 的显式最小语言。它是一种相对较新的配置文件格式,被 Python 社区广泛使用。我们将讨论 TOML 的语法,使用 tomli 和 tomllib 来解析 TOML 文档以及……
7 分钟阅读
如何在 Python 中将字节转换为字符串?Python 作为一种多功能且功能强大的编程语言,提供了一种将字节转换为字符串的直接方法。在处理需要转换为字符串的二进制数据(例如文件或网络数据包)时,此过程至关重要。
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India