Skip to content

Latest commit

 

History

History
21 lines (14 loc) · 1.3 KB

二分查找.md

File metadata and controls

21 lines (14 loc) · 1.3 KB

二分查找

这一题如果不看题解可能会用循换的方式去解,但是二分发是这一类题的套路。需要注意的一些内容:

二分查找思想简单,但是在实现时有一些需要注意的细节:

  • 1.在计算 mid 时不能使用 mid = (l + h) / 2 这种方式,因为 l + h 可能会导致加法溢出,应该使用 mid = l + (h - l) / 2。

  • 2.对 h 的赋值和循环条件有关,当循环条件为 l <= h 时,h = mid - 1;当循环条件为 l < h 时,h = mid。 解释如下:在循环条件为 l <= h 时,如果 h = mid,会出现循环无法退出的情况,例如 l = 1,h = 1,此时 mid 也等于 1,如果此时继续执行 h = mid,那么就会无限循环;在循环条件为 l < h,如果 h = mid - 1,会错误跳过查找的数,例如对于数组 [1,2,3],要查找 1,最开始 l = 0,h = 2,mid = 1,判断 key < arr[mid] 执行 h = mid - 1 = 0,此时循环退出,直接把查找的数跳过了。

  • 3.l 的赋值一般都为 l = mid + 1。

code leetcode

    1. 猜数字大小

旋转排序数组

    1. 搜索旋转排序数组
    1. 搜索旋转排序数组 II
    1. 寻找旋转排序数组中的最小值
    1. 寻找旋转排序数组中的最小值 II