二分法
二分法
Juns二分法
704. 二分查找
有序数组中查询目标值,数组中无重复元素
对于二分个人感觉难点就是在于边界条件的判断,就好比while(l < r)
还是while(l <= r)
,还有r = m
还是r = m - 1
,这是一直搞混的。
一般写二分区间定义就是俩种,左闭右闭[l, r]
,左闭右开[l, r)
左闭右闭
while(l <= r)
,因为l === r
的时候也有意义if(nums[m] > target) r = m - 1;
,因为此时的nums[m]
一定不是 target,[ l , m - 1]
var search = function (nums, target) { |
左闭右开
while(l < r)
,因为取不到 rif(nums[m] > target) r = m;
,因为nums[m]
不是 target,[ l , m )
var search = function (nums, target) { |
69. x 的平方根
这一题就容易卡死循环,就比如 8 的平方根是 2.6 左右,答案是 2,l 和 r 不会相等,所以得在最后加一个判断
var mySqrt = function (x) { |
35. 搜索插入位置
也是二分查找,如果没有查询到也需要返回一个值,没查到其实就是返回 left 的值
var searchInsert = function (nums, target) { |
367. 有效的完全平方数
给你一个正整数 num
。如果 num
是一个完全平方数,则返回 true
,否则返回 false
这一题和 x 的平方根基本一致
var isPerfectSquare = function (num) { |
相关题目推荐
- 300. 最长上升子序列
- 718. 最长重复子数组
- 349. 两个数组的交集
- 230. 二叉搜索树中第 K 小的元素
- 4. 寻找两个正序数组的中位数
- 153. 寻找旋转排序数组中的最小值
- 162. 寻找峰值
- 34. 在排序数组中查找元素的第一个和最后一个位置
- 240. 搜索二维矩阵 II
- 887. 鸡蛋掉落
- 222. 完全二叉树的节点个数
- 33. 搜索旋转排序数组
- 面试题 10.03. 搜索旋转数组
- 50. Pow(x, n)
- 剑指 Offer 11. 旋转数组的最小数字
导出上面链接用的小工具函数
codetop 直接超链接导出成 md 格式:
let links = document.querySelectorAll('.external-link') |