August 15, 2022

2158. Amount of New Area Painted Each Day

2158. Amount of New Area Painted Each Day

Treemap + merge intervals.

class Solution {
    public int[] amountPainted(int[][] paint) {
        TreeMap<Integer, Integer> intervals = new TreeMap<>();
        int[] res = new int[paint.length];
        for (int i = 0; i < paint.length; i++) {
            int start = paint[i][0];
            int end = paint[i][1];
            int area = end - start;
            while (intervals.floorKey(start) != null) {
                int prevStart = intervals.floorKey(start);
                int prevEnd = intervals.get(prevStart);
                if (prevEnd <= start) {
                    break; 
                }
                area -= Math.min(end, prevEnd) - Math.max(start, prevStart);
                start = Math.min(start, prevStart);
                end = Math.max(end, prevEnd);
                intervals.remove(prevStart);
            }
            while (intervals.floorKey(end) != null) {
                int prevStart = intervals.floorKey(end);
                int prevEnd = intervals.get(prevStart);
                if (prevEnd <= start) {
                    break;
                }
                area -= Math.min(end, prevEnd) - Math.max(start, prevStart);
                start = Math.min(start, prevStart);
                end = Math.max(end, prevEnd);
                intervals.remove(prevStart);
            }
            res[i] = area;
            intervals.put(start, end);
        }
        return res;
        
    }
}
comments powered by Disqus