Minimum Number of Removals to Make Mountain Array

You may recall that an array arr is a mountain array if and only if:

Given an integer array nums​​​, return the minimum number of elements to remove to make nums​​​ a mountain array.

 

Example 1:

Input: nums = [1,3,1]
Output: 0
Explanation: The array itself is a mountain array so we do not need to remove any elements.

Example 2:

Input: nums = [2,1,1,5,6,2,3,1]
Output: 3
Explanation: One solution is to remove the elements at indices 0, 1, and 5, making the array nums = [1,5,6,3,1].

Example 3:

Input: nums = [4,3,2,1,1,2,3,1]
Output: 4

Example 4:

Input: nums = [1,2,3,4,4,3,2,1]
Output: 1

 

Constraints:


Solution:

class Solution {
    public int minimumMountainRemovals(int[] nums) {
        int n = nums.length;
        int[] inc = new int[n];
        int[] dec = new int[n];
        inc[0] = 0;
        dec[n - 1] = 0;
        for (int i = 1; i < n; i ++) {
            for (int j = 0; j < i; j ++) {
                if (nums[i] > nums[j]) {
                    inc[i] = Math.max(inc[i], inc[j] + 1);
                }
            }
        }
        for (int i = n - 2; i >= 0; i --) {
            for (int j = n - 1; j > i; j --) {
                if (nums[i] > nums[j]) {
                    dec[i] = Math.max(dec[i], dec[j] + 1);
                }
            }
        }
        int min = n;
        for (int i = 0; i < n; i ++) {
            if (inc[i] > 0 && dec[i] > 0) {
                min = Math.min(min, n - (inc[i] + dec[i] + 1));
            }
        }
        // System.out.println(Arrays.toString(inc));
        // System.out.println(Arrays.toString(dec));
        return min;
    }
}