二分查找
二分搜索是一种反复将搜索空间一分为二的算法。这种搜索技术遵循分而治之的策略。每次迭代中搜索空间总是减少一半。导致时间复杂度为 O(log(n)),其中 n 是元素数量。
条件:数组应该是排序的,但它们也可以应用于单调函数,我们需要找到单调递增或单调递减。
当我们需要以对数时间缩小搜索空间时,它就有效。
我们使用两个指针,左指针和右指针。取左右的平均值来找到中间元素。
现在,我们根据条件检查应该将左右指针移动到哪里。
解决一个问题主要需要三个步骤:
- 预处理: 如果输入未排序,则对输入进行排序。
- 二分查找:使用两个指针并找到中间部分来划分搜索空间,然后相应地选择正确的一半。
- 后处理:确定输出。
二分搜索算法的优点 - 对于大数据,二分搜索比线性搜索更快,因为它每次将数组切成两半,而不是逐一检查每个元素。这使得它更快、更高效。
限制:二分查找仅适用于已排序的数组,因此对于小型未排序数组效率不高,因为排序需要额外的时间。对于小型内存搜索,它的效果也不如线性搜索。
应用: 用于在排序数组中搜索元素,时间复杂度为 O(log(n)),也可用于查找数组中的最小或最大元素。
基本二分查找代码 -
代码
def binarySearch(nums, target): if len(nums) == 0: return -1 left, right = 0, len(nums) - 1 while left right return -1
33。在旋转排序数组中搜索
给定可能旋转后的数组 nums 和整数目标,如果目标在 nums 中,则返回目标索引,如果不在 nums 中,则返回 -1。
您必须编写一个运行时间复杂度为 O(log n) 的算法。
示例1:
输入:nums = [4,5,6,7,0,1,2],目标 = 0
输出:4
示例2:
输入:nums = [4,5,6,7,0,1,2],目标 = 3
输出:-1
示例3:
输入:nums = [1],目标 = 0
输出:-1
代码
def binarySearch(nums, target): if len(nums) == 0: return -1 left, right = 0, len(nums) - 1 while left right return -1
- 使用左右两个指针,迭代直到它们重叠。
- 找到中间元素。
- 由于数组已排序但已旋转,我们不能简单地将左侧或右侧的元素与中间的进行比较。
- 首先,通过比较中指针与左指针或右指针来确定左部分或右部分排序。
- 根据这个结论,相应地调整指针。
时间复杂度 - O(log(n)),因为搜索空间在每次迭代中被分成两半。
空间复杂度 - O(1)
单调递增
162。找到峰值元素
峰值元素是严格大于其邻居的元素。
给定一个 0 索引的整数数组 nums,找到一个峰值元素,并返回其索引。如果数组包含多个峰值,则返回任意峰值的索引。
您可能会想象 nums[-1] = nums[n] = -∞。换句话说,一个元素总是被认为严格大于数组外部的邻居。
您必须编写一个在 O(log n) 时间内运行的算法。
示例1:
输入:nums = [1,2,3,1]
输出:2
说明:3 是峰值元素,您的函数应返回索引号 2。
示例2:
输入:nums = [1,2,1,3,5,6,4]
输出:5
说明:您的函数可以返回索引号 1(峰值元素为 2)或索引号 5(峰值元素为 6)。
代码
class Solution: def search(self, nums: List[int], target: int) -> int: left = 0 right = len(nums)-1 while left = nums[left]: # if nums[mid]= nums[left]: if nums[left] <ol> <li>在此类问题中,我们需要通过比较中间的左侧或右侧元素来检查峰值。</li> <li>这有助于确定图表趋势是向上还是向下。</li> <li>要找到最大值,请搜索向上的斜率并探索正确的子空间。</li> <li>要找到最小值,请搜索左侧子空间</li> </ol> <p><strong>时间复杂度 - O(log(n))</strong>,因为搜索空间在每次迭代中被分成两半。<br> <strong>空间复杂度 - O(1)</strong></p>
以上是二分查找 ||蟒蛇 ||数据结构和算法的详细内容。更多信息请关注PHP中文网其他相关文章!

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

本文解释了如何使用美丽的汤库来解析html。 它详细介绍了常见方法,例如find(),find_all(),select()和get_text(),以用于数据提取,处理不同的HTML结构和错误以及替代方案(SEL)

本文比较了Tensorflow和Pytorch的深度学习。 它详细介绍了所涉及的步骤:数据准备,模型构建,培训,评估和部署。 框架之间的关键差异,特别是关于计算刻度的

本文指导Python开发人员构建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等库详细介绍,强调输入/输出处理,并促进用户友好的设计模式,以提高CLI可用性。

本文讨论了诸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和请求等流行的Python库,并详细介绍了它们在科学计算,数据分析,可视化,机器学习,网络开发和H中的用途

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

文章讨论了虚拟环境在Python中的作用,重点是管理项目依赖性并避免冲突。它详细介绍了他们在改善项目管理和减少依赖问题方面的创建,激活和利益。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中