@@ -10,7 +10,9 @@ var search = function (nums, target) {
10
10
let right = nums . length - 1 ;
11
11
12
12
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 )
14
16
15
17
if ( target < nums [ middle ] ) {
16
18
right = middle - 1 ;
@@ -24,21 +26,21 @@ var search = function (nums, target) {
24
26
return - 1 ;
25
27
26
28
// 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
-
43
29
// return binarySearchRecursive(nums, 0, nums.length - 1, target);
44
30
} ;
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