// 找不到应该插入的位置
// nums[low]永远小于等于target,nums[high]永远大于等于target
// 最后low=high+1,因为找不到要插入,所以应该返回low
func find(nums []int, target int) (bool, int) {
low, high := 0, len(nums)-1
for low <= high {
mid := (high-low)/2 + low
if nums[mid] == target {
return true, mid
} else if nums[mid] < target {
low = mid + 1
} else {
high = mid - 1
}
}
return false, low
}
// 1 2 3 4 5 6 7
// 3 4 5 6 7 1 2
// 6 7 1 2 3 4 5
// 如果nums[mid]小于nums[low],那么low-mid是升序,mid-high是逆序
// 如果nums[mid]大于nums[low],那么low-mid是逆序,mid-high是升序
// nums[low]永远小于
func find2(nums []int, target int) int {
low, high := 0, len(nums)-1
for low <= high {
mid := (high-low)/2 + low
if nums[mid] == target {
return mid
}
if nums[low] <= nums[mid] {
if nums[mid] < target || target < nums[low] {
low = mid + 1
} else {
high = mid - 1
}
} else {
if nums[mid] < mid || target < nums[high] {
high = mid - 1
} else {
low = mid + 1
}
}
}
return -1
}
nums[mid] < target || target < nums[low]
最新推荐文章于 2024-09-15 19:46:31 发布