当前位置 博文首页 > baiyang103的博客:【数组】经典二分查找

    baiyang103的博客:【数组】经典二分查找

    作者:[db:作者] 时间:2021-09-03 12:10

    项目场景:

    (leetcode704)给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。


    例如:
    输入: nums = [-1,0,3,5,9,12], target = 9
    输出: 4
    解释: 9

    算法:

    初始化指针 left = 0, right = n - 1。
    当 left <= right:
    比较中间元素 nums[mid] 和目标值 target 。
    如果 target = nums[mid],返回 mid。
    如果 target < nums[mid],则在左侧继续搜索 right = mid - 1。
    如果 target > nums[mid],则在右侧继续搜索 left = mid + 1。

    二分查找:

    @bbbbbaiyang
    class Solution:
        def search(self, nums, target):
            if nums == None or len(nums) == 0:
                return 0
            left,right= 0,len(nums)-1
            while (left <= right):
                mid = left +(right - left)//2
                if nums[mid] == target:
                    return mid
                elif nums[mid] < target:
                    left = mid + 1
                else:
                    right = mid - 1
            return -1
    

    二分搜索经典写法 ,三点注意:

    1. 循环退出条件,注意是 left <= right,?不是 left < right。
    2. mid 的取值,mid := left+ (right-left) // 2
    3. left 和 right 的更新。left = mid + 1,right = mid - 1。

    cs