欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 二分查找变形 -- 搜索具有重复元素的旋转数组

二分查找变形 -- 搜索具有重复元素的旋转数组

2025/3/1 9:00:26 来源:https://blog.csdn.net/2302_77889694/article/details/145934403  浏览:    关键词:二分查找变形 -- 搜索具有重复元素的旋转数组

参考:81. 搜索旋转排序数组 II - 力扣(LeetCode)


 

思路:
    数组中有重复元素时,可能会影响二分查找的效果。通过判断 左右两边的值 是否相等,我们可以规避这种情况,调整搜索方向

参考代码:

def search(nums, target):left = 0right = len(nums) - 1while left <= right:mid = left + (right - left) // 2if nums[mid] == target:return mid# 处理重复元素# 由于该情况不能直接通过比较它们来判断当前区间的有序性。# 而是选择 缩小范围(通过 left += 1 和 right -= 1)来跳过重复元素,从而继续缩小搜索空间。# 如果我们不做任何处理,二分查找会陷入一个困境:它无法决定是向左还是向右搜索if nums[left] == nums[mid] == nums[right]:left += 1right -= 1elif nums[left] <= nums[mid]:  # mid左侧有序if nums[left] <= target < nums[mid]: # 在左侧内right = mid - 1else:  # 不在左侧内left = mid + 1else:  # mid右侧有序if nums[mid] < target <= nums[right]:left = mid + 1else:right = mid - 1return -1nums = [1,1,3,1,1,1,1] # 还可以变题,重复元素中第一个出现target的index,现在还不满足;后续补充
# nums = [2,5,6,0,0,1,2]
target = 1
print(search(nums, target)) # 输出3(index)

ps:输出部分自己修改一下Boolean型就好了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词