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
:
[li, ri]
in nums
by at most vali
.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:
[0, 1, 2]
by [1, 0, 1]
respectively.[1, 0, 1]
.[0, 1, 2]
by [1, 0, 1]
respectively.[0, 0, 0]
, which is a Zero Array. Therefore, the minimum value of k
is 2.Example 2:
Input: nums = [4,3,2,1], queries = [[1,3,2],[0,2,1]]
Output: -1
Explanation:
[1, 2, 3]
by [2, 2, 1]
respectively.[4, 1, 0, 0]
.[0, 1, 2]
by [1, 1, 0]
respectively.[3, 0, 0, 0]
, which is not a Zero Array.Constraints:
1 <= nums.length <= 105
0 <= nums[i] <= 5 * 105
1 <= queries.length <= 105
queries[i].length == 3
0 <= li <= ri < nums.length
1 <= vali <= 5
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;
}
}