LeetCode-in-Java

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

public class Solution {
    public int minZeroArray(int[] nums, int[][] queries) {
        int[] diff = new int[nums.length];
        int idx = 0;
        int d = 0;
        for (int i = 0; i < nums.length; i++) {
            d += diff[i];
            while (nums[i] + d > 0 && idx < queries.length) {
                int[] q = queries[idx];
                if (i >= q[0] && i <= q[1]) {
                    d -= q[2];
                }
                diff[q[0]] -= q[2];
                if (q[1] + 1 < nums.length) {
                    diff[q[1] + 1] += q[2];
                }
                idx++;
            }
            if (nums[i] + d > 0) {
                return -1;
            }
        }
        return idx;
    }
}