Find in Mountain Array LeetCode solution in JavaScript

1
/**
2
* // This is the MountainArray's API interface.
3
* // You should not implement it, or speculate about its implementation
4
* function MountainArray() {
5
* @param {number} index
6
* @return {number}
7
* this.get = function(index) {
8
* ...
9
* };
10
*
11
* @return {number}
12
* this.length = function() {
13
* ...
14
* };
15
* };
16
*/
17

18
var binarySearch = function (left, right, condition) {
19
while (left < right) {
20
var mid = left + Math.floor((right - left) / 2);
21
if (condition(mid)) {
22
right = mid;
23
} else {
24
left = mid + 1;
25
}
26
}
27
return left;
28
};
29

30
/**
31
* @param {number} target
32
* @param {MountainArray} mountainArr
33
* @return {number}
34
*/
35
var findInMountainArray = function (target, mountainArr) {
36
var n = mountainArr.length();
37
var maxNumIdx = binarySearch(1, n - 2, function (idx) {
38
return mountainArr.get(idx) > mountainArr.get(idx + 1);
39
});
40
var leftIdx = binarySearch(0, maxNumIdx, function (idx) {
41
return mountainArr.get(idx) >= target;
42
});
43
if (mountainArr.get(leftIdx) === target) {
44
return leftIdx;
45
}
46
var rightIdx = binarySearch(maxNumIdx, n - 1, function (idx) {
47
return mountainArr.get(idx) <= target;
48
});
49
if (mountainArr.get(rightIdx) === target) {
50
return rightIdx;
51
}
52
return -1;
53
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0