解析
解法1
O(log n)
的时间复杂度算法,决定了查找算法是二分查找。其他的就是判断。
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
//logn的是二分查找
let low = 0,high = nums.length-1
//未查找到的时候的插入下标值
let noFindIndex = 0
while (low <= high) {
let mid = Math.floor((low + high) / 2);
//每次保存计算的中间值
noFindIndex = mid
if(target === nums[mid]){
//查找到的下标
return mid
}else if(target < nums[mid]){
high = mid - 1
}else if(target > nums[mid]){
low = mid + 1
}
}
//如果没有找到目标值,noFindIndex就是最后一次中间值
if(target < nums[noFindIndex]){
//未找到的值,目标值 < 最后一次中间下标的值,就返回noFindIndex
return noFindIndex
}else {
//未找到的值,目标值 > 最后一次中间下标的值,就返回noFindIndex+1
return noFindIndex + 1
}
};