-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path704-binarySearch.js
76 lines (61 loc) · 2.12 KB
/
704-binarySearch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//URL--
// https://leetcode.com/problems/binary-search/
//INSTRUCTIONS--
/* Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.
You must write an algorithm with O(log n) runtime complexity.
Example 1:
Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4
Example 2:
Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1
Constraints:
1 <= nums.length <= 104
-104 < nums[i], target < 104
All the integers in nums are unique.
nums is sorted in ascending order.
*/
//SOLUTION--
/*
I am going to check if the middle number is more than, equal to or less than the original number
if it's equal, return the current index
if it's less than, set the end to one less than the index
if it's more than, set the start to one more than the index
repeat until the start index is not less than the end index
return -1 if the number is not found
*/
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
const search = function (nums, target) {
let start = 0
let end = nums.length - 1
//while start is before or equal to the end
while (start <= end) {
const middle = Math.floor((start + end) / 2)
// if the target is equal to the middle, return the current index
if (nums[middle] === target) {
return middle
}
// if the middle is more than the target, set the end to one less than the middle
else if (nums[middle] > target) {
end = middle - 1
}
// if the middle is less than the target, set the start to one more than the middle
else {
start = middle + 1
}
}
// if the number is not found, return -1
return -1
};
//TESTCASES--
console.log(search([-1], -1), 0)
console.log(search([-1, 0, 3, 5, 9, 12], 9), 4)
console.log(search([-1, 0, 3, 5, 9, 12], 2), -1)
console.log(search([-1, 0], -1), 0)
console.log(search([-1, 0, 1, 1], 1), 2)