35. 搜索插入位置
Difficulty: 简单
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
Solution
二分查找
Language: Golang
func searchInsert(nums []int, target int) int {
//二分查找
start := 0
end := len(nums) - 1
length := len(nums)
for start <= end {
mid := start + (end-start)/2
if nums[mid] == target {
return mid
} else if mid == 0 && nums[0] > target { //如果第一个元素比,如果第一个元素都比target小,则返回0
return 0
} else if mid > 0 && nums[mid] > target && nums[mid-1] < target { //如果当前元素大于target,前一个元素又比target小
return mid
} else if mid == length-1 && nums[mid] < target { //如果最后元素的最后一个也比target小
return length
} else if mid > 0 && nums[mid] < target && nums[mid+1] > target {
return mid + 1
} else if nums[mid] > target {
end = mid - 1
} else if nums[mid] < target {
start = mid + 1
}
}
return 0
}
暴力查找
func searchInsert(nums []int, target int) int {
//暴力查找
for i := 0; i < len(nums); i++ {
//因为是有序的
if nums[i] >= target {
return i
}
}
return len(nums)
}