查找算法:二分法变种
作者:互联网
大家都很熟悉二分法查找算法,但是例如[5,6,7,1,2,3,4]这样一个不完全有序数组,是否可以使用二分法的思想进行查找呢?
这一数组可以看作是由一个完全有序的数组翻折得到的。或者可以理解成两个有序数组,且第二个数组的最大值小于第一的最小值,我们将其拼接,拼接成了一个不完全有序的数组,在这个数组中我们需要找到 target ,找到后返回其索引,如果没有找到则返回-1。
def spc_binary_search(nums, target):
left = 0
right = len(nums) - 1
while left <= right:
mid = (right + left) // 2
if nums[mid] == target:
return mid
if nums[mid] >= nums[left]:
if nums[mid] > target and target >= nums[left]:
right = mid - 1
elif target > nums[mid] or target < nums[left]:
left = mid + 1
elif nums[mid] < nums[left]:
if nums[mid] < target and target <= nums[right]:
left = mid + 1
elif target < nums[mid] or target > nums[right]:
right = mid - 1
return -1
nums = [5, 6, 7, 1, 2, 3, 4]
target = 6
spc_binary_search(nums, target)
欢迎大家转发,一起传播知识和正能量,帮助到更多人。辛苦大家转发时注明出处(也是咱们公益编程交流群的入口网址):http://liujingwei.cn
标签:right,target,nums,变种,mid,二分法,查找,数组,left 来源: https://blog.csdn.net/liujingwei8610/article/details/117302332