美文网首页
二分搜索 分析

二分搜索 分析

作者: 霍尔元件 | 来源:发表于2019-07-08 22:03 被阅读0次

二分搜索深入分析

二分小技巧

我们考虑二分问题 区间应该如何收缩的问题时
应该把nums[mid]直接想象成数组中间的位置的数 (这句话好像是废话,但是确实应该这么思考...)
固定了中间位置的数字之后 分析target跟nums[mid]的关系
target比较大 所以target在右半段 反之 target在左半段

还是示意图直观

image image
class Solution:
    # 基本的二分搜索 查找特定的数字是否存在
    def binarySearch(self, nums, target):
        left, right = 0, len(nums) - 1
        while left <= right:
            mid = left + (right - left) // 2
            if nums[mid] == target:
                return mid + 1
            elif nums[mid] < target:  # 代码走到这一行 说明了mid一定不是target 之后的搜索区间一定不需要包括mid
                left = mid + 1
            else:
                right = mid - 1
        return -1

    def binarySearch2(self, nums, target):
        left, right = 0, len(nums) - 1
        while left < right:
            mid = left + (right - left) // 2
            if nums[mid] < target: # target 位于右半段
                left = mid + 1
            else: # num[mid] <= target
                right = mid # 因为nums[mid] == target 是可能的 所以mid这个位置不能丢
        return right if nums[right] == target else -1 # 有可能target不存在

对于这两段代码的分析

对于基本的二分搜索

  • 每一轮循环区间都必然会收缩 所以算法必然收敛
  • 如果nums中没有target leftright指针必然会交叉

对于有重复元素的二分搜索

  • 不能保证每一轮搜索区间的收缩
    因为当nums[mid]<=target时 right = mid 区间可能不会收缩
  • left == mid == right 并且 nums[mid] < target代码陷入死循环
    所以循环条件不能是while left <= right

相关文章

  • Algorithm进阶计划 -- 二分搜索

    二分搜索二分搜索模板二分搜索运用 1. 二分搜索模板 二分搜索(二分查找)也称折半查找(Binary Search...

  • 二分搜索 分析

    二分搜索深入分析 二分小技巧 我们考虑二分问题 区间应该如何收缩的问题时应该把nums[mid]直接想象成数组中间...

  • 算法-二分搜索算法

    算法:二分搜索算法(折半查找算法)时间复杂度: 二分搜索算法概述 二分搜索算法伪代码 二分搜索算法实现 二分搜索算...

  • 二分搜索难点分析

    能使用二分搜索的前提是数组已排序。 二分查找的使用场景:(1)可转换为find the first/last po...

  • 搜索算法

    顺序搜索 二分搜索

  • 二分搜索(Binary_Search)

    1. 二分搜索是什么? 二分搜索(英语:binary search),也叫折半搜索(英语:half-interva...

  • AVL 树

    一:什么是 AVL 树? 在我的上一篇文章《二分搜索树与二分查找法》中,详细介绍了二分搜索树这种数据结构。二分搜索...

  • 二分算法-LeetCode 69

    二分算法-LeetCode 69 二分算法 二分算法模板, 二分搜索即搜索一个数,如果存在,返回其索引,否则返回-...

  • Pearls9. 代码调优

    [TOC] 问题:在包含1000个整数的表中进行二分搜索: 二分搜索的调优 说明:在二分搜索中通常不需要代码调优 ...

  • Pearls4 编写正确的程序

    4.1 二分搜索

网友评论

      本文标题:二分搜索 分析

      本文链接:https://www.haomeiwen.com/subject/xrjzhctx.html