主要思想
适用场景:数组中的数据是有序的,并且没有重复的值,则可以用二分查找。
思想:通过二分来缩小查找的范围,而不需要一步一步遍历查找。
注意点:注意所取的区间,分成左闭右闭,左闭右开和左开右闭等情况;区间对判断条件和赋值都会有影响。
实现
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。
如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
} `