python怎么实现搜索旋转排序数组
发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,这篇文章主要讲解了"python怎么实现搜索旋转排序数组",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python怎么实现搜索旋转排序数组"吧!【题目
千家信息网最后更新 2025年01月26日python怎么实现搜索旋转排序数组
这篇文章主要讲解了"python怎么实现搜索旋转排序数组",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python怎么实现搜索旋转排序数组"吧!
【题目】
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
示例 1:
输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4
示例 2:
输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1
【思路】
1、暴力解法:for循环遍历,找到目标值。
2、二分查找特殊变形。必须理解到:不管怎么旋转,总有一部分区间是有序的。比如,l->mid和mid->r之中至少有一个是有序的。我们的逻辑就是:判断target是否在有序区间中,在则将另一个指针移动到有序区间内,否则将有序区间的指针(除mid外的另一个边界指针)移动到有序区间外。
【代码】
python版本
class Solution:
def search(self, nums: List[int], target: int) -> int:
l, r = 0, len(nums) - 1
while l <= r:
mid = (l + r) // 2
if nums[mid] == target:
return mid
# mid->r是有序的
if nums[mid] < nums[r]:
if nums[mid] < target <= nums[r]:
l = mid + 1
else:
r = mid - 1
# l->mid是有序的
else:
if nums[l] <= target < nums[mid]:
r = mid - 1
else:
l = mid + 1
return -1
感谢各位的阅读,以上就是"python怎么实现搜索旋转排序数组"的内容了,经过本文的学习后,相信大家对python怎么实现搜索旋转排序数组这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
数组
有序
排序
搜索
区间
指针
目标
目标值
学习
内容
就是
思路
示例
移动
输入
输出
复杂
特殊
之中
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
联想服务器有配置锁定功能吗
数据库作业存储过程
工信部的网络安全示范补贴
软件开发和测试模型优缺点
虎猫网络安全课
广东第七城网络技术
网络安全木马类大作业
河北节能软件开发定制
网络安全大赛效果图背景
体育学位论文资源检索数据库
用数据库选课
网络安全 2020提案
sql的数据库求和
qq邮箱 邮件服务器
网络安全有趣知识点
如果没有网络安全防护会怎么样
江苏自动化oa管控软件开发平台
网络安全企业资质要求
安卓手机倒数据库
9.0服务器人数查询
数据库一次增加一行数据库
中学生网络安全演讲ppt
用高防服务器好还是用云防护好
湖北地级市网络安全协会
数据库服务登录身份证号
维护网络安全的 我们要
思科网络安全简介答案
我的世界魔塔服务器武器排行
广西优居互联网科技有限公司
平安银行数据库运维工程师