1. 数组
参考:代码随想录:链接.
704. 二分查找
- 704. 二分查找
- 0502,easy,qick
中间一分为二,搜索二叉树中常用的方法。
- 二分法查找的前提是数组已经排序完成。
方法一:递归
var search = function (nums, target) {
// 特值
if (!nums.length) return -1;
return findNumber(nums, 0, nums.length - 1);
function findNumber(nums, left, right) {
const index = left + Math.floor((right - left) / 2);
// 找不到返回 -1
if (right < left) return -1;
// 找得到返回结果
if (nums[index] === target) return index;
// 递归,寻找结果
return target < nums[index]
? findNumber(nums, left, index - 1)
: findNumber(nums, index + 1, right);
}
};
- 时间复杂度:O(logn),
- 空间复杂度:O(logn),
- 递归算法的空间复杂度 = 递归深度 n * 每次递归所要的辅助空间。
- 本题中,每一次递归,都保存了 left 和 right 两个参数,所以空间复杂度和递归的次数相同为
O(logn)