提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
二分模板
- 创建ans变量存储下标,初始为数组右边界,代表如果不存在target,下标就是右边界2
- nums[mid] >= target 表示mid是一个满足条件的解,把mid存下来,继续找mid左边更小的
function bSearch(nums, n, target) {
let l = 0, r = n - 1
let ans = n
while (l <= r) {
let mid = (l + r) >>> 1
if (nums[mid] >= target) {
ans = mid
r = mid - 1
} else {
l = mid + 1
}
}
return ans
}
35. 搜索插入位置
题目链接
题解
function bSearch(nums, n, target) {
let l = 0, r = n - 1
let ans = n
while (l <= r) {
let mid = (l + r) >>> 1
if (nums[mid] >= target) {
ans = mid
r = mid - 1
} else {
l = mid + 1
}
}
return ans
}
function searchInsert(nums: number[], target: number): number {
return bSearch(nums, nums.length, target)
};
704. 二分查找
题目链接
题解
function bSearch(nums, n, target) {
let l = 0, r = n - 1
let ans = n
while (l <= r) {
let mid = (l + r) >>> 1
if (nums[mid] >= target) {
ans = mid
r = mid - 1
} else {
l = mid + 1
}
}
return ans
}
function search(nums: number[], target: number): number {
let index = bSearch(nums, nums.length, target)
if (index == nums.length || nums[index] != target) {
return -1
}
return index
};
剑指 Offer 53 - I. 在排序数组中查找数字 I
题目链接
题解
function bSearch(nums, n, target) {
let l = 0, r = n - 1
let ans = n
while (l <= r) {
let mid = (l + r) >>> 1
if (nums[mid] >= target) {
ans = mid
r = mid - 1
} else {
l = mid + 1
}
}
return ans
}
function search(nums: number[], target: number): number {
let index = bSearch(nums, nums.length, target)
if (index == nums.length || nums[index] != target) {
return 0
}
return bSearch(nums, nums.length, target + 1) - index
};