Find in Mountain Array LeetCode solution in Java

1
class Solution {
2
public int findInMountainArray(int target, MountainArray mountainArr) {
3
int peak = findPeak(mountainArr);
4

5
int left = binary(0, peak, mountainArr, target, true);
6
if (left != -1) {
7
return left;
8
}
9
int right = binary(peak + 1, mountainArr.length() - 1, mountainArr, target, false);
10
return right;
11
}
12

13
static int findPeak(MountainArray mountainArr) {
14
int start = 0;
15
int end = mountainArr.length() - 1;
16

17
while (start < end) {
18
int mid = start + ((end - start) / 2);
19

20
if (mountainArr.get(mid) < mountainArr.get(mid + 1)) {
21
start = mid + 1;
22
} else {
23
end = mid;
24
}
25
}
26
return start;
27
}
28

29
static int binary(int low, int high, MountainArray arr, int target, boolean left) {
30
while (low <= high) {
31
int mid = low + ((high - low) / 2);
32
if (target < arr.get(mid)) {
33
if (left) {
34
high = mid - 1;
35
} else {
36
low = mid + 1;
37
}
38
} else if (target > arr.get(mid)) {
39
if (left) {
40
low = mid + 1;
41
} else {
42
high = mid - 1;
43
}
44
} else {
45
return mid;
46
}
47
}
48
return -1;
49
}
50
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0