数组之二分查找

218 阅读1分钟

主要思想

适用场景:数组中的数据是有序的,并且没有重复的值,则可以用二分查找。

思想:通过二分来缩小查找的范围,而不需要一步一步遍历查找。

注意点:注意所取的区间,分成左闭右闭,左闭右开和左开右闭等情况;区间对判断条件和赋值都会有影响。

实现

搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。

如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5

输出: 2

示例 2:

输入: [1,3,5,6], 2

输出: 1

示例 3:

输入: [1,3,5,6], 7

输出: 4

示例 4:

输入: [1,3,5,6], 0

输出: 0

`function insertIndex(nums,target){

let len = nums.length;
if(len<0) return 
let left = 0,right = len-1,middle;
//因为是左闭右闭,所以left可以等于right
while(left<=right){
    //因为每次left和right不同,middle也会发生变化,所以在循环中赋值
    middle = Math.floor((left + right)/2);
    //如果是小于,说明目标值在右边,则left需要重新赋值
    if(nums[middle]<target){
        //因为左边可以取,所以是middle+1
        left = middle + 1   
    }else if(nums[middle]>target){
        right = middle - 1
    }else{
        return middle
    }
}
return right+1

} `