温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python怎么实现搜索旋转排序数组

发布时间:2022-03-22 15:30:24 阅读:198 作者:iii 栏目:大数据
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要讲解了“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 = 0len(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怎么实现搜索旋转排序数组这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4581374/blog/4661797

AI

开发者交流群×