Skip to content

Commit 80001a0

Browse files
committed
uploaded R solution for 1671
1 parent a29997a commit 80001a0

File tree

1 file changed

+52
-0
lines changed
  • Daily Problems/Hard/1671. Minimum Number of Removals to Make Mountain Array

1 file changed

+52
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
minimumMountainRemovals <- function(nums) {
2+
n <- length(nums)
3+
4+
# Calculate LIS from the left side
5+
left_lis <- integer(n)
6+
temp <- c()
7+
for (i in 1:n) {
8+
pos <- findInterval(nums[i], temp, left.open = TRUE) + 1
9+
if (pos > length(temp)) {
10+
temp <- c(temp, nums[i])
11+
} else {
12+
temp[pos] <- nums[i]
13+
}
14+
left_lis[i] <- pos
15+
}
16+
17+
# Calculate LIS from the right side (for LDS)
18+
right_lis <- integer(n)
19+
temp <- c()
20+
for (i in n:1) {
21+
pos <- findInterval(nums[i], temp, left.open = TRUE) + 1
22+
if (pos > length(temp)) {
23+
temp <- c(temp, nums[i])
24+
} else {
25+
temp[pos] <- nums[i]
26+
}
27+
right_lis[i] <- pos
28+
}
29+
30+
# Calculate the maximum mountain length
31+
max_mountain <- 0
32+
for (i in 2:(n - 1)) {
33+
if (left_lis[i] >= 2 && right_lis[i] >= 2) {
34+
max_mountain <- max(max_mountain, left_lis[i] + right_lis[i] - 1)
35+
}
36+
}
37+
38+
# Return minimum elements to remove
39+
if (max_mountain > 0) {
40+
return(n - max_mountain)
41+
} else {
42+
return(n)
43+
}
44+
}
45+
46+
# Example usage
47+
nums1 <- c(1, 3, 1)
48+
nums2 <- c(2,1,1,5,6,2,3,1)
49+
nums3 <- c(100,92,89,77,74,66,64,66,64)
50+
print(minimumMountainRemovals(nums1)) # Output: 0
51+
print(minimumMountainRemovals(nums2))
52+
print(minimumMountainRemovals(nums3))

0 commit comments

Comments
 (0)