package com.fishercoder.solutions;

import com.fishercoder.common.classes.Interval;

import java.util.Arrays;
import java.util.Collections;

/**
 * 435. Non-overlapping Intervals
 *
 * Given a collection of intervals,
 * find the minimum number of intervals you need to remove to make the rest of the
 * intervals non-overlapping.

 Note:
 You may assume the interval's end point is always bigger than its start point.
 Intervals like [1,2] and [2,3] have borders "touching" but they don't overlap each other.

 Example 1:
 Input: [ [1,2], [2,3], [3,4], [1,3] ]
 Output: 1
 Explanation: [1,3] can be removed and the rest of intervals are non-overlapping.

 Example 2:
 Input: [ [1,2], [1,2], [1,2] ]
 Output: 2
 Explanation: You need to remove two [1,2] to make the rest of intervals non-overlapping.

 Example 3:
 Input: [ [1,2], [2,3] ]
 Output: 0
 Explanation: You don't need to remove any of the intervals since they're already non-overlapping.
 */

public class _435 {

    public static class Solution1 {
        /**
         * credit:: https://discuss.leetcode.com/topic/65828/java-solution-with-clear-explain
         * and https://discuss.leetcode.com/topic/65594/java-least-is-most
         * Sort the intervals by their end time, if equal, then sort by their start time.
         */
        public int eraseOverlapIntervals(Interval[] intervals) {
            Collections.sort(Arrays.asList(intervals), (o1, o2) -> {
                if (o1.end != o2.end) {
                    return o1.end - o2.end;
                } else {
                    return o2.start - o1.start;
                }
            });
            int end = Integer.MIN_VALUE;
            int count = 0;
            for (Interval interval : intervals) {
                if (interval.start >= end) {
                    end = interval.end;
                } else {
                    count++;
                }
            }
            return count;
        }
    }

}
@@ -138,821 +138,8 @@
 s;%0A%0A
-/**%0A * 435. Non-overlapping Intervals%0A *%0A * Given a collection of intervals,%0A * find the minimum number of intervals you need to remove to make the rest of the%0A * intervals non-overlapping.%0A%0A Note:%0A You may assume the interval's end point is always bigger than its start point.%0A Intervals like %5B1,2%5D and %5B2,3%5D have borders %22touching%22 but they don't overlap each other.%0A%0A Example 1:%0A Input: %5B %5B1,2%5D, %5B2,3%5D, %5B3,4%5D, %5B1,3%5D %5D%0A Output: 1%0A Explanation: %5B1,3%5D can be removed and the rest of intervals are non-overlapping.%0A%0A Example 2:%0A Input: %5B %5B1,2%5D, %5B1,2%5D, %5B1,2%5D %5D%0A Output: 2%0A Explanation: You need to remove two %5B1,2%5D to make the rest of intervals non-overlapping.%0A%0A Example 3:%0A Input: %5B %5B1,2%5D, %5B2,3%5D %5D%0A Output: 0%0A Explanation: You don't need to remove any of the intervals since they're already non-overlapping.%0A */%0A%0A
 publ

refactor 435