diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index f358d2be..67809000 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -283,31 +283,46 @@ func search(nums []int, target int) int { // (版本一)左闭右闭区间 +/** + * @param {number[]} nums + * @param {number} target + * @return {number} + */ var search = function(nums, target) { - let l = 0, r = nums.length - 1; - // 区间 [l, r] - while(l <= r) { - let mid = (l + r) >> 1; - if(nums[mid] === target) return mid; - let isSmall = nums[mid] < target; - l = isSmall ? mid + 1 : l; - r = isSmall ? r : mid - 1; + let left = 0, right = nums.length; + // 使用左闭右开区间 [left, right) + while (left < right) { + let mid = left + Math.floor((right - left)/2); + if (nums[mid] > target) { + right = mid; // 去左区间寻找 + } else if (nums[mid] < target) { + left = mid + 1; // 去右区间寻找 + } else { + return mid; + } } return -1; }; // (版本二)左闭右开区间 +/** + * @param {number[]} nums + * @param {number} target + * @return {number} + */ var search = function(nums, target) { - let l = 0, r = nums.length; - // 区间 [l, r) - while(l < r) { - let mid = (l + r) >> 1; - if(nums[mid] === target) return mid; - let isSmall = nums[mid] < target; - l = isSmall ? mid + 1 : l; - // 所以 mid 不会被取到 - r = isSmall ? r : mid; + let left = 0, right = nums.length; + // 使用左闭右开区间 [left, right) + while (left < right) { + let mid = left + Math.floor((right - left)/2); + if (nums[mid] > target) { + right = mid; // 去左区间寻找 + } else if (nums[mid] < target) { + left = mid + 1; // 去右区间寻找 + } else { + return mid; + } } return -1; };