212 字
1 分钟
56. 合并区间
56. 合并区间
题目:https://leetcode.cn/problems/merge-intervals/
思路
先遍历一遍 intervals 数组,然后在范围中的值都标记为已涵盖,然后第二次遍历依次收集即可。
出现问题,边界问题处理不了。。。
正确思路:先按左端点排序,然后收集即可。
代码
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
ranges::sort(intervals);
vector<vector<int>> ans;
for (auto& p : intervals) {
if (!ans.empty() && p[0] <= ans.back()[1]) {
ans.back()[1] = max(ans.back()[1], p[1]);
} else {
ans.emplace_back(p);
}
}
return ans;
}
};
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (p, q) -> p[0] - q[0]); // 按照左端点从小到大排序
List<int[]> ans = new ArrayList<>();
for (int[] p : intervals) {
int m = ans.size();
if (m > 0 && p[0] <= ans.get(m - 1)[1]) { // 可以合并
ans.get(m - 1)[1] = Math.max(ans.get(m - 1)[1], p[1]); // 更新右端点最大值
} else { // 不相交, 无法合并
ans.add(p); // 新的合并区间
}
}
return ans.toArray(new int[ans.size()][]);
}
}