14. 二分查找

为君一笑 提交于 2019-11-28 15:09:49

原文引用 大专栏  https://www.dazhuanlan.com/2019/08/26/5d6353ca4af56/

描述

给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1.

样例

在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2.

挑战

如果数组中的整数个数超过了2^32,你的算法是否会出错?

如果对二分查找比较陌生话,那么讲个小游戏,猜数字,在0-10000中随机取个数,让你猜,猜错了告诉你大了还是小了.

那么第一想法是什么?报中位数?对,不停的报中位数直到剩下最后一个数,这个数就是所需数,这个方法是比一个一个遍历要快非常多所需步骤也仅为log2n 回到正题

class Solution:
def binarySearch(self, nums, target):

    # write your code here
    start=0
    end=len(nums)
    mid=int(end/2)
    while start<=end:
        n_mid = nums[mid]
        if n_mid <target: #right
            start=mid+1
            mid=int((end+start)/2)
        elif n_mid >target: #left
            end=mid-1
            mid=int((end-start)/2)
        else:
            while nums[mid]==target:
                mid-=1
            return mid+1
    return -1

参考于这篇做了一些修正,在没有重复的情况下,else的部分去除.直接return mid+1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!