## [Leetcode]435. Non-overlapping Intervals (C++)

### 题目描述

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

### 例子

#### 例子 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.

#### 例子 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.

#### 例子 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.

### 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.

### 解题思路

``````class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {

if (intervals.empty()) return 0;

std::sort(intervals.begin(), intervals.end(), [](std::vector<int>& a, std::vector<int>& b) {
return a[0] < b[0];
});

int result = 0;

int right = intervals[0][1];

for (int i = 1; i < intervals.size(); i++) {
if (right > intervals[i][0]) {
result++;
right = std::min(right, intervals[i][1]);
} else {
right = intervals[i][1];
}
}

return result;

}
};
``````
• 时间复杂度: O(nlogn)
• 空间复杂度: O(n)