leetcode 704. 二分查找

朴素二分查找,无需考虑左右边界问题

leetcode 374. 猜数字大小

搜索左边界,假设选中的数字为target,当前猜测的数字为guess(下标为mid),当target > guess时,即舍弃左侧区间[left, mid],即left = mid + 1。否则的话(target <= guess),收缩右边界, right = mid,即舍弃右侧区间[mid+1, right]

leetcode 35. 搜索插入位置

找到第一个大于等于target的值,即搜索target的右边界,当arr[mid] < target时,即区间 [left, mid]一定没有符合题目条件的答案,我们直接舍弃,设置left = mid + 1,下一次搜索区间为 [mid+1, right]。否则设置right = mid,即下一次的搜索区间为[left, mid]

leetcode 852. 山脉数组的峰顶索引

峰顶元素具有一个特性,它的值比其他元素都大,而且山脉的左侧是递增的,右侧是递减的,因此,我们利用arr[mid]arr[mid-1]来进行判断。

  1. 如果arr[mid] > arr[mid-1],证明峰顶元素只有可能存在于区间[mid, right],绝无可能存在于[left, mid-1],因此改变左边界为left=mid
  2. 如果arr[mid] < arr[mid-1],证明峰顶元素只有可能存在于区间[left, mid-1],绝无可能存在于[mid, right],因此改变右边界为right=mid-1

leetcode 367. 有效的完全平方数

  1. 注意数值溢出,使用long或将乘法改成除法!!
  2. 如果mid * mid > num,证明mid的平方不可能为num,即下一次搜索的区间为[left, mid-1],我们设置右边界为right = mid-1
  3. 否则的话,即mid * mid <= num,题目的答案存在于区间[mid, right],我们设置左边界为

left=mid

leetcode 1385. 两个数组间的距离值

注意:这道题的目的是找大于等于target的左边界,即left_bound_number = rightBound(),和 找小于等于target的右边界,即right_bound_number = leftBound()

leetcode 69. x 的平方根

leetcode 744. 寻找比目标字母大的最小字母

leetcode 278. 第一个错误的版本

leetcode 34. 在排序数组中查找元素的第一个和最后一个元素

leetcode 441. 排列硬币

leetcode 1539. 第 k 个缺失的正整数

leetcode 167. 两数之和 II - 输入有序数组

leetcode 1608. 特殊数组的特征值

leetcode 1351. 统计有序矩阵中的负数

leetcode 74. 搜索二维矩阵