二分加特殊情况归纳
func search(nums []int, target int) int {
if (nums[0] < nums[len(nums)-1] && (target < nums[0] || target > nums[len(nums)-1])) || //超出范围直节返回
(nums[0] > nums[len(nums)-1] && target < nums[0] && target > nums[len(nums)-1]) {
return -1
} else if target == nums[0] {
return 0
} else if target == nums[len(nums)-1] {
return len(nums) - 1
}
left, middle, right := 0, 0, len(nums)-1
for right > left+1 {
middle = (left + right) / 2
if nums[middle] > target {
if nums[right] < nums[left] && target < nums[0] && nums[middle] > nums[0] { //特殊情况 456123 target 1 middle上为6
left = middle
} else { //其他为标准二分
right = middle
}
} else if nums[middle] < target {
if nums[left] > nums[right] && target > nums[0] && nums[middle] < nums[0] { //特殊情况 45123 target 5 middle上为1
right = middle
} else { //其他为标准二分
left = middle
}
} else {
return middle
}
}
return -1
}
结果
这篇博客探讨了如何在二分查找算法中处理边界和特殊情况,包括目标值位于有序数组之外、等于首尾元素的情况。通过示例代码展示了在不同情况下的二分查找逻辑,特别是针对特殊情况456123和45123目标值的优化处理。
1404

被折叠的 条评论
为什么被折叠?



