一、题目描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
二、解题思路过程
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
var n=nums.length;
// 创建左右指针
var left=0,right=n-1;
// 左指针小于右指针,说明还未找到目标值
while(left<=right){
// 规定中间指针取左右指针的中间值,因为指针移动后,用位运算取均值有偏差,偏差正好等于左指针位置,所以加上左指针索引
var mid=((right-left)>>1)+left;
// 如果目标值小于中间指针,说明目标值在指针右方,向右移动右指针,缩小搜索范围
// 否则,目标值在指针左方,向左移动左指针
// 最终,中间指针指向位置等于目标值,直接返回中间指针
if(target<nums[mid]){
right=mid-1;
}else if(target>nums[mid]){
left=mid+1;
}else{
return mid;
};
};
// 如果未找到,返回-1
return -1;
};
三、复杂度分析
时间复杂度:,其中 N为数组的长度。二分查找所需的时间复杂度为
空间复杂度:,我们只需要常数空间存放若干变量。
四、题目来源
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-search