Skip to content

Commit 9e2527e

Browse files
committed
704. 二分查找 (二刷)
1 parent ea4da85 commit 9e2527e

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

algorithms/binary-search.js

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ var search = function (nums, target) {
1010
let right = nums.length - 1;
1111

1212
while (left <= right) {
13-
const middle = Math.floor((left + right) / 2);
13+
// const middle = Math.floor((left + right) / 2);
14+
// 防止 left + right 过大导致溢出
15+
const middle = left + ((right - left) >> 1)
1416

1517
if (target < nums[middle]) {
1618
right = middle - 1;
@@ -24,21 +26,21 @@ var search = function (nums, target) {
2426
return -1;
2527

2628
// 2. 递归
27-
// const binarySearchRecursive = (array, left, right, target) => {
28-
// if (left <= right) {
29-
// const middle = Math.floor((left + right) / 2);
30-
31-
// if (target < array[middle]) {
32-
// return binarySearchRecursive(array, left, middle - 1, target);
33-
// } else if (target > array[middle]) {
34-
// return binarySearchRecursive(array, middle + 1, right, target);
35-
// } else {
36-
// return middle;
37-
// }
38-
// } else {
39-
// return -1;
40-
// }
41-
// };
42-
4329
// return binarySearchRecursive(nums, 0, nums.length - 1, target);
4430
};
31+
32+
function binarySearchRecursive(array, left, right, target) {
33+
if (left <= right) {
34+
const middle = left + ((right - left) >> 1)
35+
36+
if (target < array[middle]) {
37+
return binarySearchRecursive(array, left, middle - 1, target);
38+
} else if (target > array[middle]) {
39+
return binarySearchRecursive(array, middle + 1, right, target);
40+
} else {
41+
return middle;
42+
}
43+
} else {
44+
return -1;
45+
}
46+
}

0 commit comments

Comments
 (0)