Leetcode 704 二分查找
思路:
二分查找前提:有序数组,无重复数据
1、确定有效区间,左闭右开,左闭右闭
2、根据有效区间,写边界条件
3、把有效的结果返回
注意事项:取中间下角标的时候,需要注意超界问题。
方法1 右移位运算
let middle = left + ( right - left ) >> 1;
方法2
需要注意的是,JS并没有定义变量为整型数据的能力,需要自己手动向下取整。
let middle = Math.floor(left + (( right - left ) / 2));
时间复杂度 O(logn)
空间复杂度 O(1)
Typescript代码
左闭右闭
let nums: number[] = [-1,0,3,5,9,12];
// let target: number = 2;
let target: number = 9;
function search(nums: number[], target: number): number {
let left: number = 0;
let right: number = nums.length - 1;
let middle: number = 0;
while(left <= right){
let middle: number = Math.floor(left + ((right - left) / 2));
if (target < nums[middle]) {
right = middle - 1;
} else if (target > nums[middle]) {
left = middle + 1;
} else {
return middle;
}
}
return -1;
};
const result = search(nums, target)