1
var minimumDeletions = function (nums) {
2
if (nums.length === 1) return 1;
3
let min = Math.min();
4
let max = Math.max();
5

6
// finding min and max
7
for (let n of nums) {
8
min = Math.min(n, min);
9
max = Math.max(n, max);
10
}
11

12
// obj to store no. of elements to remove if we start from left and if we start from right
13
const obj = {
14
left: [],
15
right: [],
16
};
17
// left[0]-> no. of elements upto min element if we start from left
18
// left[1]-> no. of elements upto max element if we start from left
19
// right[0]-> no. of elements upto min element if we start from right
20
// right[1]-> no. of elements upto max element if we start from right
21
for (let i = 0; i < nums.length; i++) {
22
if (nums[i] === max) {
23
obj["left"][1] = i + 1;
24
obj["right"][1] = nums.length - i;
25
}
26
if (nums[i] === min) {
27
obj["left"][0] = i + 1;
28
obj["right"][0] = nums.length - i;
29
}
30
}
31
let total = 0;
32
const set = new Set();
33
// if no. of elements to remove min element from left is less than right
34
if (obj["left"][0] < obj["right"][0]) {
35
set.add("left");
36
total += obj["left"][0];
37
} else {
38
// vice versa
39
set.add("right");
40
total += obj["right"][0];
41
}
42
// if no. of elements to remove max element from right is less than left
43
if (obj["left"][1] < obj["right"][1]) {
44
set.add("left");
45
total += obj["left"][1];
46
} else {
47
// vice versa
48
set.add("right");
49
total += obj["right"][1];
50
}
51

52
// if both elements are to be removed from diff direction inorder to remove lesser element
53
// we have 3 cases:
54
// one from left and one from right(total), min/max element lies after max/min ele from left,min/max element lies after max/min ele from right
55
if (set.size === 2)
56
return Math.min(total, Math.max(...obj["left"]), Math.max(...obj["right"]));
57
else {
58
// if both elements can be removed from same direction(ie. either left or right)
59
return Math.max(...obj[set.values().next().value]);
60
}
61
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0