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] from nums.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, 2] by 1.[1, 0, 1].[0, 2] by 1.[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:
It is impossible to make nums a Zero Array even after all the queries.
Example 3:
Input: nums = [1,2,3,2,1], queries = [[0,1,1],[1,2,1],[2,3,2],[3,4,1],[4,4,1]]
Output: 4
Explanation:
[0, 1] by 1.[0, 1, 3, 2, 1].[1, 2] by 1.[0, 0, 2, 2, 1].[2, 3] by 2.[0, 0, 0, 0, 1].[0, 0, 0, 0, 0]. Therefore, the minimum value of k is 4.Example 4:
Input: nums = [1,2,3,2,6], queries = [[0,1,1],[0,2,1],[1,4,2],[4,4,4],[3,4,1],[4,4,5]]
Output: 4
Constraints:
1 <= nums.length <= 100 <= nums[i] <= 10001 <= queries.length <= 1000queries[i] = [li, ri, vali]0 <= li <= ri < nums.length1 <= vali <= 10Problem Overview: You are given an integer array and a sequence of allowed transformations. Each transformation affects a range or position and reduces values according to specific rules. The goal is to determine whether you can apply these operations so every element in the array becomes exactly zero.
Approach 1: Brute Force Simulation (Exponential Time, O(2^m) time, O(m) space)
The most direct strategy is to try every possible combination of operations. For each subset of operations, simulate how the array changes and check if all values become zero. This approach repeatedly copies the array and applies reductions step by step. While this demonstrates the mechanics of the problem, the number of combinations grows exponentially with the number of operations, making it impractical for large inputs.
Approach 2: Dynamic Programming Over Operations (O(n * m) time, O(n) space)
A better strategy models the process using dynamic programming. Iterate through operations while maintaining the effective reduction applied to each index. The DP state tracks how much reduction has been accumulated up to a certain position. When processing an operation, update the affected range and propagate its impact forward. This avoids recomputing transformations from scratch and reduces the complexity to O(n * m), where n is the array size and m is the number of operations.
Approach 3: Prefix Accumulation + Greedy DP (O(n + m) time, O(n) space)
The optimized solution combines prefix accumulation with a lightweight DP decision process. Instead of applying each operation directly to the array, track the net effect using a difference array. As you scan from left to right, maintain the current cumulative reduction and decide whether additional operations must be activated to keep the value non‑negative and eventually reach zero. This technique relies on fast prefix updates, a common pattern in array problems, and turns repeated range updates into constant‑time adjustments. The result is a linear pass across the array with O(n + m) time and O(n) auxiliary space.
Recommended for interviews: Interviewers typically expect the prefix‑based dynamic programming approach. Brute force shows you understand the transformation rules, but the optimized method demonstrates stronger problem‑solving skills by converting repeated range updates into prefix effects and processing the array in a single pass. Problems like this frequently combine ideas from dynamic programming and prefix techniques, so recognizing that pattern is key.
Solutions for this problem are being prepared.
Try solving it yourself| Approach | Time | Space | When to Use |
|---|---|---|---|
| Brute Force Simulation | O(2^m) | O(m) | Useful only for very small inputs or understanding the transformation rules |
| Dynamic Programming Over Operations | O(n * m) | O(n) | General case when operations must be evaluated sequentially |
| Prefix Accumulation + Greedy DP | O(n + m) | O(n) | Optimal approach for large arrays and many operations |
3489. Zero Array Transformation IV (Leetcode Medium) • Programming Live with Larry • 614 views views
Watch 6 more video solutions →Practice Zero Array Transformation IV with our built-in code editor and test cases.
Practice on FleetCode