35. 搜索插入位置

35. 搜索插入位置

题目描述:

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

你可以假设数组中无重复元素。

难度:简单

示例 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题的解法很简单,直接二分搜索就可以了。不过需要注意一点的是,在没有相等的数时找出应该被插入的位置,这个信息可以被等价转换为在没有相等的数时,找出刚好比被搜索值大的数。由于二分搜索中,lo 的值是在不断的递进的,而 hi 的值则再不断递减,当最终没有目标值时,lo 的值会停留在高于目标值的位置。

func searchInsert2(nums []int, target int) int {
	l := len(nums)
	lo := 0;hi := l - 1
	middle := (lo + hi) / 2

	for lo <= hi{
		if nums[middle] < target{
			lo = middle + 1
			middle = (lo + hi) / 2
		} else if nums[middle] > target{
			hi = middle - 1
			middle = (lo + hi) / 2
		}else{
			return middle
		}
	}
	return lo
}

发表评论

邮箱地址不会被公开。 必填项已用*标注