Set Intersection Size At Least Two

Hard
Watch on YouTube ↗

Solution

class Solution {
    public int intersectionSizeTwo(int[][] intervals) {
        HashSet<Integer> set = new HashSet<>(); // O(n)
        Arrays.sort(intervals, (a,b)->Integer.compare(a[1], b[1])); // Onlogn
        int max = intervals[0][1];
        int secmax = max-1; // [2,5] --> 4,5
        set.add(max);
        set.add(secmax);

        for(int i=1; i<intervals.length; i++) {

            // if complete overlap

            if(intervals[i][0] <= secmax) {
                continue;
            }

            else if(intervals[i][0] <= max) {
                secmax = max;
                max = intervals[i][1];
                if(set.contains(max)) {
                    set.add(max-1);
                    secmax = max-1;
                }
                set.add(max);
            }

            else {
                // mutual exlcusive

                max = intervals[i][1];
                secmax = max-1;
                set.add(max);
                set.add(secmax);
            }

            //System.out.println(set);
        }

        return set.size();
    }
}