LeetCode in Kotlin

3542. Minimum Operations to Convert All Elements to Zero

Medium

You are given an array nums of size n, consisting of non-negative integers. Your task is to apply some (possibly zero) operations on the array so that all elements become 0.

In one operation, you can select a subarray [i, j] (where 0 <= i <= j < n) and set all occurrences of the minimum non-negative integer in that subarray to 0.

Return the minimum number of operations required to make all elements in the array 0.

Example 1:

Input: nums = [0,2]

Output: 1

Explanation:

Example 2:

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

Output: 3

Explanation:

Example 3:

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

Output: 4

Explanation:

Constraints:

Solution

class Solution {
    fun minOperations(nums: IntArray): Int {
        val mq = IntArray(nums.size)
        var idx = 0
        var res = 0
        for (num in nums) {
            if (num == 0) {
                res += idx
                idx = 0
            } else {
                while (idx > 0 && mq[idx - 1] >= num) {
                    if (mq[idx - 1] > num) {
                        res++
                    }
                    idx--
                }
                mq[idx++] = num
            }
        }
        return res + idx
    }
}