3-二分-索引二分-搜索插入位置

这是索引二分的第三篇算法,比较简单,缓一缓。力扣链接

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

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

示例 1:

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

示例 2:

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

示例 3:

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

如果前两题是二分查找改的话,这道题就是纯粹二分查找。

老规矩先上个暴力求解玩玩:

func searchInsert(nums []int, target int) int {
	for i, num := range nums {
		if num == target {
			return i
		} else if num > target {
			return i
		}
	}
	return len(nums)
}

二分查找的解题思路也很简单,这里使用左闭右闭的二分逻辑,找到了返回mid的值,找不到返回leftIndex的值。

func searchInsert(nums []int, target int) int {
	l, r := 0, len(nums)-1
	for l <= r {
		mid := l + (r-l)/2
		if nums[mid] == target {
			return mid
		}else if nums[mid] < target {
			l = mid + 1
		}else {
			r = mid - 1
		}
	}
	return l
}

你可能感兴趣的:(白话算法,算法,数据结构)