python算法双指针问题:二分查找

Posted aguncn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python算法双指针问题:二分查找相关的知识,希望对你有一定的参考价值。

这里要注意的是//向下取整,下次循环时,如果大于查找的数字,start+1。

并且,只能向下取整,如果向上取整。

那么,在比较第一个数时,start = 0 。end = 1。mid = 1。就会进入死循环了。

切记切记。

import math
a_list = [2, 5, 23, 45, 67, 89, 90, 123, 234, 345, 567, 7890, 12132]

guess_no = 67
answer = -1

start, end = 0, len(a_list)

while end - start > 1:
    mid = (end + start) // 2
    print(start, end, mid, a_list[mid])
    if a_list[mid] == guess_no:
        answer = guess_no
        break
    elif a_list[mid] < guess_no:
        start = mid + 1
    else:
        end = mid
else:
    if a_list[start] == guess_no:
        answer = guess_no
        print(find it)

print(answer)
# ==================上面为书,下面为自己=================
answer = -1

start, end = 0, len(a_list)
while start < end:
    mid = math.floor((start + end) / 2)
    print(start, end, mid, a_list[mid])
    if guess_no < a_list[mid]:
        end = mid
    elif guess_no == a_list[mid]:
        answer = guess_no
        break
    else:
        start = mid + 1
print(answer)

输出:

0 13 6 90
0 6 3 45
4 6 5 89
find it
67
0 13 6 90
0 6 3 45
4 6 5 89
4 5 4 67
67

Process finished with exit code 0

 

以上是关于python算法双指针问题:二分查找的主要内容,如果未能解决你的问题,请参考以下文章

34. 在排序数组中查找元素的第一个和最后一个位置-二分查找双指针

34. 在排序数组中查找元素的第一个和最后一个位置-二分查找双指针

双指针思维模式:理解双指针算法的思维模式和设计思路

二分查找总结

AcWing算法基础课排序 二分 高精度 前缀和 差分 双指针 位运算 离散化 区间合并

基础算法(数据结构笔试复测Leecode牛客)