题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
var search = function(nums, target) {
let left=0
let right=nums.length-1
while(left<=right){
let mid=Math.floor(left+(right-left)/2)
if(target>nums[mid]){
left=mid+1
}else if(target<nums[mid]){
right=mid-1
}else{
return mid
}
}
return -1
};
console.log(search([-1,0,3,5,9,12],2))
解题思路:
- 定义左右指针left=0,right=nums.length-1
- 搜索区间为左闭右闭:[ left , right ]
- 计算中点mid=left+( right-left ) / 2,防止加法溢出
- 比较nums[ mid ] 和 target 的大小,如果相等则 mid 即为寻找的下标,如果不相等,则根据nums[ mid ] 和 target 的大小关系将查找范围缩小一半。
由于每次查找都会将查找范围缩小一半,因此二分查找的时间复杂度是O(logn)。