(二分查找)搜索插入位置


我的解法

emm,像我这么菜的人只能用暴力来算了。。

func searchInsert(nums []int, target int) int {
	if target < nums[0] {
		return 0
	}
	for k, v := range nums {
		if v == target {
			return k
		}
		if nums[k] < target && k+1 < len(nums) && nums[k+1] > target {
			return k + 1
		}
	}
	return len(nums)
}

func main() {
	log.Println(searchInsert([]int{1, 3, 5, 6}, 7))
}

然而就算暴力也没别人的好。。。

func searchInsert(nums []int, target int) int {
	for i := 0; i < len(nums); i++ {
		if target <= nums[i] {
			return i
		}
	}
	return len(nums)
}

二分查找

二分查找本质上就是利用一个left一个right指针,然后我们取中间来进行比较,如果中间的比目标值要大,那么右指针就变到中间,否则就是左指针+1 ,我们查找的是一个大于或者等于的下标

func searchInsert(nums []int, target int) int {
	left := 0
	right := len(nums)
	for left < right {
		middle := (right + left) / 2
		if nums[middle] >= target {
			right = middle
		} else {
			left = middle + 1
		}
	}
	return left
}

文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录