# Leetcode Non-Overlapping-Intervals 2022-09-03 15:34 > ##### Algorithms: > > #algorithm #greedy > > ##### Data structures: > > #DS #array > > ##### Difficulty: > > #coding_problem #difficulty_medium > > ##### Additional tags: > > # # > > ##### Revisions: > > N/A ##### Links: - [Link to problem](https://leetcode.com/problems/non-overlapping-intervals/) --- ### Problem Given an array of intervals `intervals` where `intervals[i] = [starti, endi]`, return _the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping_. #### Examples **Example 1:** **Input:** intervals = [[1,2],[2,3],[3,4],[1,3]] **Output:** 1 **Explanation:** [1,3] can be removed and the rest of the intervals are non-overlapping. **Example 2:** **Input:** intervals = [[1,2],[1,2],[1,2]] **Output:** 2 **Explanation:** You need to remove two [1,2] to make the rest of the intervals non-overlapping. **Example 3:** **Input:** intervals = [[1,2],[2,3]] **Output:** 0 **Explanation:** You don't need to remove any of the intervals since they're already non-overlapping. #### Constraints - `1 <= intervals.length <= 105` - `intervals[i].length == 2` - `-5 * 104 <= starti < endi <= 5 * 104` ### Thoughts > [!summary] > This is a #greedy problem, similar to [[Leetcode Merge-Intervals]] #### Key concept: first sort the intervals. pick the intervals with smallest end, which will allow us to make more room for following ones. #tip: Use `&` to reference vectors in comp.function to save time. ### Solution ```cpp class Solution { static bool comp(vector &a, vector &b) { return a[1] < b[1]; } public: int eraseOverlapIntervals(vector> &intervals) { sort(intervals.begin(), intervals.end(), comp); // Using this var to skip overlapping intervals. auto before = intervals[0]; int ans = 0; for (int i = 1, size = intervals.size(); i < size; i++) { if (intervals[i][0] < before[1]) { ans++; } else { before = intervals[i]; } } return ans; } }; ```