35. 搜索插入位置

目录

35. 搜索插入位置

easy 二分

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

1
2
输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

1
2
输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

1
2
输入: nums = [1,3,5,6], target = 7
输出: 4
  • nums无重复元素升序排列数组

二分

经典的二分搜索的变种题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// searchInsert 找到第一个比target大的 或者找到最后一个比target小的元素即可
func searchInsert(nums []int, target int) int {
   low, high := 0, len(nums)-1
   for low <= high {
      mid := (low + high) >> 1
      if target < nums[mid] {
         if mid == 0 || target > nums[mid-1] {
            return mid
         }
         high = mid - 1
      } else if target > nums[mid] {
         if mid == len(nums)-1 || target < nums[mid+1] {
            return mid + 1
         }
         low = mid + 1
      } else {
         return mid
      }
   }
   return -1
}