LeetCode-in-Java

3469. Find Minimum Cost to Remove Array Elements

Medium

You are given an integer array nums. Your task is to remove all elements from the array by performing one of the following operations at each step until nums is empty:

Return the minimum cost required to remove all the elements.

Example 1:

Input: nums = [6,2,8,4]

Output: 12

Explanation:

Initially, nums = [6, 2, 8, 4].

The cost to remove all elements is 8 + 4 = 12. This is the minimum cost to remove all elements in nums. Hence, the output is 12.

Example 2:

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

Output: 5

Explanation:

Initially, nums = [2, 1, 3, 3].

The cost to remove all elements is 2 + 3 = 5. This is the minimum cost to remove all elements in nums. Hence, the output is 5.

Constraints:

Solution

import java.util.Arrays;

public class Solution {
    private static final int INF = (int) 1e9;

    public int minCost(int[] nums) {
        int n = nums.length;
        if (n % 2 == 0) {
            nums = Arrays.copyOf(nums, ++n);
        }
        int[] dp = new int[n];
        for (int j = 1; j < n - 1; j += 2) {
            int cost1 = INF;
            int cost2 = INF;
            int max = Math.max(nums[j], nums[j + 1]);
            for (int i = 0; i < j; ++i) {
                cost1 = Math.min(cost1, dp[i] + Math.max(nums[i], nums[j + 1]));
                cost2 = Math.min(cost2, dp[i] + Math.max(nums[i], nums[j]));
                dp[i] += max;
            }
            dp[j] = cost1;
            dp[j + 1] = cost2;
        }
        int result = INF;
        for (int i = 0; i < n; ++i) {
            result = Math.min(result, dp[i] + nums[i]);
        }
        return result;
    }
}