我的解法
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
}