DDSA
Advertisement

3362. Zero Array Transformation III

3362.java
Java
import java.util.*;

class Solution {
    public int maxRemoval(int[] nums, int[][] queries) {
        int queryIndex = 0;
        Queue<Integer> available = new PriorityQueue<>(Collections.reverseOrder()); // available `r`s
        Queue<Integer> running = new PriorityQueue<>(); // running `r`s

        Arrays.sort(queries, Comparator.comparingInt((int[] query) -> query[0]));

        for (int i = 0; i < nums.length; ++i) {
            while (queryIndex < queries.length && queries[queryIndex][0] <= i)
                available.offer(queries[queryIndex++][1]);
            while (!running.isEmpty() && running.peek() < i)
                running.poll();
            while (nums[i] > running.size()) {
                if (available.isEmpty() || available.peek() < i)
                    return -1;
                running.offer(available.poll());
            }
        }

        return available.size();
    }
}
Advertisement
Was this solution helpful?