Minimum Number of Removals to Make Mountain Array LeetCode solution in C++
1class Solution {2public:3int minimumMountainRemovals(vector<int> &nums) {4int n = nums.size();56vector<int> dp1(n, 1), dp2(n, 1);78// LIS from front9for (int i = 0; i < n; i++) {10for (int j = 0; j < i; j++) {11if (nums[i] > nums[j] && 1 + dp1[j] > dp1[i]) {12dp1[i] = 1 + dp1[j];13}14}15}1617// LIS from back18for (int i = n - 1; i >= 0; i--) {19for (int j = n - 1; j > i; j--) {20if (nums[i] > nums[j] && dp2[j] + 1 > dp2[i]) {21dp2[i] = dp2[j] + 1;22}23}24}2526int maxi = 1;27for (int i = 0; i < n; i++) {28if (dp1[i] > 1 && dp2[i] > 1) {29maxi = max(maxi, dp1[i] + dp2[i] - 1);30}31}32return (n - maxi);33}34};