31 35. Search Insert Position 二分插入

93 阅读1分钟

35. Search Insert Position

binary search 二分搜索拓展

解题思路

  1. 数组是从小到大排序好,那么如果最小值 nums[0] 都大于目标值 target ,直接返回 0
  2. 利用二分法 right = 0 left = nums.lenght - 1 mid是左右边界的中值
  3. 如果找到了相等的值,直接返回 mid
  4. 如果最后没有找到,那么 left 最后与 right** 指向了同一个值**,这个值如果小于target返回 left + 1否则返回 left

代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
   if(nums[0] > target) return 0
   let right = 0
   let left = nums.length - 1
   while(left > right) {
       let mid = Math.floor(right + (left - right) / 2)
       if(nums[mid] === target) {
           return mid
       } else if(nums[mid] > target) {
           left = mid - 1
       } else {
           right = mid + 1
       }    
   }
   if(nums[left] < target) {
       return left + 1
   } 
   
   return left
};