2025-05-22 Daily Challenge
Today I have done leetcode's May LeetCoding Challenge with cpp
.
May LeetCoding Challenge 22
Description
Zero Array Transformation III
You are given an integer array nums
of length n
and a 2D array queries
where queries[i] = [li, ri]
.
Each queries[i]
represents the following action on nums
:
- Decrement the value at each index in the range
[li, ri]
innums
by at most 1. - The amount by which the value is decremented can be chosen independently for each index.
A Zero Array is an array with all its elements equal to 0.
Return the maximum number of elements that can be removed from queries
, such that nums
can still be converted to a zero array using the remaining queries. If it is not possible to convert nums
to a zero array, return -1.
Example 1:
Input: nums = [2,0,2], queries = [[0,2],[0,2],[1,1]]
Output: 1
Explanation:
After removing queries[2]
, nums
can still be converted to a zero array.
- Using
queries[0]
, decrementnums[0]
andnums[2]
by 1 andnums[1]
by 0. - Using
queries[1]
, decrementnums[0]
andnums[2]
by 1 andnums[1]
by 0.
Example 2:
Input: nums = [1,1,1,1], queries = [[1,3],[0,2],[1,3],[1,2]]
Output: 2
Explanation:
We can remove queries[2]
and queries[3]
.
Example 3:
Input: nums = [1,2,3,4], queries = [[0,3]]
Output: -1
Explanation:
nums
cannot be converted to a zero array even after using all the queries.
Constraints:
1 <= nums.length <= 105
0 <= nums[i] <= 105
1 <= queries.length <= 105
queries[i].length == 2
0 <= li <= ri < nums.length
Solution
class Solution {
public:
int maxRemoval(vector<int>& nums, vector<vector<int>>& queries) {
sort(queries.begin(), queries.end());
priority_queue<int> candidates;
priority_queue<int, vector<int>, greater<int>> chosen;
int need = 0;
int pos = 0;
for(int i = 0; i < nums.size(); ++i) {
while(pos < queries.size() && queries[pos][0] == i) {
candidates.push(queries[pos][1]);
pos += 1;
}
nums[i] -= chosen.size();
while(nums[i] > 0 && candidates.size() && candidates.top() >= i) {
need += 1;
chosen.push(candidates.top());
candidates.pop();
nums[i] -= 1;
}
if(nums[i] > 0) return -1;
while(chosen.size() && chosen.top() == i) {
chosen.pop();
}
}
return queries.size() - need;
}
};
// Accepted
// 824/824 cases passed (131 ms)
// Your runtime beats 51.38 % of cpp submissions
// Your memory usage beats 49.31 % of cpp submissions (224.5 MB)