Merge pull request #776 from Jerry-306/patch-12

修改 0704 二分查找 JavaScript版本解法
This commit is contained in:
程序员Carl
2021-09-26 09:44:48 +08:00
committed by GitHub

View File

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