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