Update0704.二分查找 Go示例代码

添加注释、计算区间中点mid时使用位运算代替除法运算
This commit is contained in:
cherrypicker
2023-12-21 15:29:18 +08:00
parent 3d26c1e313
commit 25a330fcdb

View File

@ -251,40 +251,60 @@ class Solution:
(版本一)左闭右闭区间 (版本一)左闭右闭区间
```go ```go
// 时间复杂度 O(logn)
func search(nums []int, target int) int { func search(nums []int, target int) int {
high := len(nums)-1 // 初始化左右边界
low := 0 left := 0
for low <= high { right := len(nums) - 1
mid := low + (high-low)/2
if nums[mid] == target { // 循环逐步缩小区间范围
return mid for left <= right {
} else if nums[mid] > target { // 求区间中点
high = mid-1 mid := left + (right-left)>>1
} else {
low = mid+1 // 根据 nums[mid] 和 target 的大小关系
} // 调整区间范围
} if nums[mid] == target {
return -1 return mid
} else if nums[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
// 在输入数组内没有找到值等于 target 的元素
return -1
} }
``` ```
(版本二)左闭右开区间 (版本二)左闭右开区间
```go ```go
// 时间复杂度 O(logn)
func search(nums []int, target int) int { func search(nums []int, target int) int {
high := len(nums) // 初始化左右边界
low := 0 left := 0
for low < high { right := len(nums)
mid := low + (high-low)/2
if nums[mid] == target { // 循环逐步缩小区间范围
return mid for left < right {
} else if nums[mid] > target { // 求区间中点
high = mid mid := left + (right-left)>>1
} else {
low = mid+1 // 根据 nums[mid] 和 target 的大小关系
} // 调整区间范围
} if nums[mid] == target {
return -1 return mid
} else if nums[mid] < target {
left = mid + 1
} else {
right = mid
}
}
// 在输入数组内没有找到值等于 target 的元素
return -1
} }
``` ```