- 704. 二分查找">leetcode 704. 二分查找
- 374. 猜数字大小">leetcode 374. 猜数字大小
- 35. 搜索插入位置">leetcode 35. 搜索插入位置
- 852. 山脉数组的峰顶索引">leetcode 852. 山脉数组的峰顶索引
- 367. 有效的完全平方数">leetcode 367. 有效的完全平方数
- 1385. 两个数组间的距离值">leetcode 1385. 两个数组间的距离值
- 69. x 的平方根">leetcode 69. x 的平方根
- 744. 寻找比目标字母大的最小字母">leetcode 744. 寻找比目标字母大的最小字母
- 278. 第一个错误的版本">leetcode 278. 第一个错误的版本
- 34. 在排序数组中查找元素的第一个和最后一个元素">leetcode 34. 在排序数组中查找元素的第一个和最后一个元素
- 441. 排列硬币">leetcode 441. 排列硬币
- 1539. 第 k 个缺失的正整数">leetcode 1539. 第 k 个缺失的正整数
- 167. 两数之和 II - 输入有序数组">leetcode 167. 两数之和 II - 输入有序数组
- 1608. 特殊数组的特征值">leetcode 1608. 特殊数组的特征值
- 1351. 统计有序矩阵中的负数">leetcode 1351. 统计有序矩阵中的负数
- 74. 搜索二维矩阵">leetcode 74. 搜索二维矩阵
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]来进行判断。
- 如果
arr[mid] > arr[mid-1],证明峰顶元素只有可能存在于区间[mid, right],绝无可能存在于[left, mid-1],因此改变左边界为left=mid。- 如果
arr[mid] < arr[mid-1],证明峰顶元素只有可能存在于区间[left, mid-1],绝无可能存在于[mid, right],因此改变右边界为right=mid-1。
leetcode 367. 有效的完全平方数
- 注意数值溢出,使用long或将乘法改成除法!!
- 如果
mid * mid > num,证明mid的平方不可能为num,即下一次搜索的区间为[left, mid-1],我们设置右边界为right = mid-1。- 否则的话,即
mid * mid <= num,题目的答案存在于区间[mid, right],我们设置左边界为
left=mid。
leetcode 1385. 两个数组间的距离值
注意:这道题的目的是找
大于等于target的左边界,即left_bound_number = rightBound(),和 找小于等于target的右边界,即right_bound_number = leftBound()。
