leetcode435C++
时间: 2025-05-11 18:21:15 浏览: 23
### LeetCode 435 非重叠区间问题的 C++ 实现
LeetCode 第 435 题名为 **无重叠区间**(Non-overlapping Intervals),其目标是最小化移除区间的数量,使得剩下的区间不相互重叠。以下是该问题的一种高效解决方法。
#### 解决思路
此问题可以通过贪心算法来求解。核心思想是按照区间的结束时间进行升序排序,并尽可能多地保留那些最早结束的区间[^5]。这样可以为后续的区间留出更多空间,从而减少需要移除的区间数目。
具体步骤如下:
1. 对输入的区间列表按 `end` 值从小到大排序。
2. 初始化计数器变量用于记录所需删除的区间数以及上一个被选中的区间结束位置。
3. 遍历排序后的区间列表,如果当前区间的起始时间大于等于前一选定区间的结束时间,则更新最新结束时间为当前区间的结束时间;否则增加删除计数并跳过当前区间。
下面是基于上述逻辑编写的 C++ 实现:
```cpp
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
if (intervals.empty()) return 0;
// Sort by end time of each interval.
sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b) -> bool{
return a[1] < b[1];
});
int count = 0; // Number of removed intervals
int prevEnd = intervals[0][1]; // End point of the first selected interval
for (size_t i = 1; i < intervals.size(); ++i){
if (intervals[i][0] >= prevEnd){
// If no overlap with previous one, update 'prevEnd'
prevEnd = intervals[i][1];
}
else{
// Overlap exists, increment removal counter but do not change 'prevEnd'.
++count;
}
}
return count;
}
};
```
#### 复杂度分析
- 时间复杂度:O(n log n),其中主要开销来自于对区间数组的排序操作。
- 空间复杂度:O(1),除了存储输入数据外不需要额外的空间资源。
阅读全文
相关推荐



















