Skip to content

Commit

Permalink
修改 0704 二分查找 JavaScript版本解法
Browse files Browse the repository at this point in the history
原解法逻辑不够简洁清晰,简单问题被其复杂化,所以我提出个人认为更简洁清晰的解法
  • Loading branch information
Jerry-306 committed Sep 24, 2021
1 parent 0f0bb6e commit 431b5a7
Showing 1 changed file with 32 additions and 17 deletions.
49 changes: 32 additions & 17 deletions problems/0704.二分查找.md
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand Down

0 comments on commit 431b5a7

Please sign in to comment.