Element Appearing More Than 25% In Sorted Array LeetCode solution in JavaScript

1
function binarySearch(array, target, findFirst) {
2
function helper(start, end) {
3
if (start > end) {
4
return -1;
5
}
6

7
const middle = Math.floor((start + end) / 2);
8
const value = array[middle];
9

10
if (value === target) {
11
if (findFirst) {
12
if (middle === 0 || array[middle - 1] !== value) {
13
return middle;
14
}
15

16
return helper(start, middle - 1);
17
} else {
18
if (middle === array.length - 1 || array[middle + 1] !== value) {
19
return middle;
20
}
21

22
return helper(middle + 1, end);
23
}
24
} else if (value < target) {
25
return helper(middle + 1, end);
26
}
27

28
return helper(start, middle - 1);
29
}
30

31
return helper(0, array.length - 1);
32
}
33

34
const findFirstOccurance = (array, target) => binarySearch(array, target, true);
35
const findLastOccurance = (array, target) => binarySearch(array, target, false);
36

37
var findSpecialInteger = function (arr) {
38
for (const i of [
39
Math.floor(arr.length / 4),
40
Math.floor(arr.length / 2),
41
Math.floor((3 * arr.length) / 4),
42
]) {
43
const firstOccurance = findFirstOccurance(arr, arr[i]);
44
const lastOccurance = findLastOccurance(arr, arr[i]);
45

46
if (lastOccurance - firstOccurance + 1 > arr.length / 4) {
47
return arr[i];
48
}
49
}
50

51
return -1;
52
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0