1
function convertNumber(num) {
2
return parseFloat(num.toFixed(5));
3
}
4
function findMedian(arr) {
5
let start = 0;
6
let end = arr.length - 1;
7
let ans;
8
if ((end - start + 1) % 2 === 0) {
9
ans =
10
(arr[Math.floor((end + start) / 2)] +
11
arr[Math.floor((end + start) / 2) + 1]) /
12
2;
13
} else {
14
ans = arr[Math.floor((end + start) / 2)];
15
}
16
return convertNumber(ans);
17
}
18
function updateWinArray(arr) {
19
if (arr.length === 1) {
20
return;
21
}
22
let ele = arr[arr.length - 1];
23
let i;
24
for (i = arr.length - 2; i >= 0; i--) {
25
if (ele < arr[i]) {
26
arr[i + 1] = arr[i];
27
} else {
28
break;
29
}
30
}
31
arr[i + 1] = ele;
32
}
33
function binarySearch(arr, ele) {
34
let start = 0,
35
end = arr.length - 1,
36
mid;
37
while (start <= end) {
38
mid = Math.floor((start + end) / 2);
39
if (arr[mid] === ele) {
40
return mid;
41
} else if (ele > arr[mid]) {
42
start = mid + 1;
43
} else {
44
end = mid - 1;
45
}
46
}
47
}
48
var medianSlidingWindow = function (nums, k) {
49
let i = 0,
50
j = 0,
51
result = [],
52
winArr = [];
53
while (j < nums.length) {
54
winArr.push(nums[j]);
55
updateWinArray(winArr);
56
if (j - i + 1 < k) {
57
j++;
58
} else if (j - i + 1 === k) {
59
let ans = findMedian(winArr);
60
result.push(ans);
61
let indexOfiEle = binarySearch(winArr, nums[i]);
62
winArr.splice(indexOfiEle, 1);
63
i++;
64
j++;
65
}
66
}
67
return result;
68
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0