1.二分查找
解法
1.双指针
思路
- 定义left和right两指针分别从数字的头和尾开始
- 在while循环left <=right时,计算mid为 (right-left) /2 +left (一定要这样写,可以防止数字过大导致溢出),mid下标对应的数字为num
- 进入if判断(num > target)时,那么right = mid - 1(因为mid已经对比找过了,可以去除了)
- 如果num < target ,那么left = mid + 1
- 如果num == target,return mid
- while结束后还没有找到则返回-1
var search = function(nums, target) {
let left = 0, right = nums.length - 1
//注意点1:left <= right最好不要去掉等号,可以省去一次边界判断
while(left <= right) {
//注意点2:不要省略 +left,因为可以防止边界溢出
const mid = Math.floor((right - left) /2) + left
let num = nums[mid]
if(num < target) {
// 注意点3:因为mid已经判断过不符合条件,所以可以+1
left = mid + 1
} else if(num > target) {
// 注意点4:因为mid已经判断过不符合条件,所以可以-1
right = mid - 1
} else {
return mid
}
}
return -1
};