LeetCode in Kotlin

3356. Zero Array Transformation II

Medium

You are given an integer array nums of length n and a 2D array queries where queries[i] = [li, ri, vali].

Each queries[i] represents the following action on nums:

A Zero Array is an array with all its elements equal to 0.

Return the minimum possible non-negative value of k, such that after processing the first k queries in sequence, nums becomes a Zero Array. If no such k exists, return -1.

Example 1:

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

Output: 2

Explanation:

Example 2:

Input: nums = [4,3,2,1], queries = [[1,3,2],[0,2,1]]

Output: -1

Explanation:

Constraints:

Solution

class Solution {
    fun minZeroArray(nums: IntArray, queries: Array<IntArray>): Int {
        val diff = IntArray(nums.size)
        var idx = 0
        var d = 0
        for (i in nums.indices) {
            d += diff[i]
            while (nums[i] + d > 0 && idx < queries.size) {
                val q = queries[idx]
                if (i >= q[0] && i <= q[1]) {
                    d -= q[2]
                }
                diff[q[0]] -= q[2]
                if (q[1] + 1 < nums.size) {
                    diff[q[1] + 1] += q[2]
                }
                idx++
            }
            if (nums[i] + d > 0) {
                return -1
            }
        }
        return idx
    }
}