上海专业网站建设公司,办公室装修设计效果图,wordpress站内信群发,vps可以用了做网站吗题目描述
以数组 intervals 表示若干个区间的集合#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间#xff0c;并返回 一个不重叠的区间数组#xff0c;该数组需恰好覆盖输入中的所有区间 。
示例 1#xff1a;
输入#xff1a;inter…题目描述
以数组 intervals 表示若干个区间的集合其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间并返回 一个不重叠的区间数组该数组需恰好覆盖输入中的所有区间 。
示例 1
输入intervals [[1,3],[2,6],[8,10],[15,18]]
输出[[1,6],[8,10],[15,18]]
解释区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2
输入intervals [[1,4],[4,5]]
输出[[1,5]]
解释区间 [1,4] 和 [4,5] 可被视为重叠区间。提示
1 intervals.length 104intervals[i].length 20 starti endi 104
解答
C
class Solution {
public:vectorvectorint merge(vectorvectorint intervals) {if(intervals.size() 1){return intervals;} // 先按左边界升序排列sort(intervals.begin(), intervals.end(), [](const vectorint a, const vectorint b){return a[0] b[0];});vectorvectorint res;vectorint temp;bool flag false; // 最后一个区间是否被合并int sz intervals.size();for(int i 1; i sz; i){int start intervals[i - 1][0];int end intervals[i - 1][1];// 左边区间右边界 大于 右边区间左边界就要合并while(i sz intervals[i][0] end){end max(end, intervals[i][1]);if(i sz - 1) flag true; // 最后一个区间被合并到前面区间了i;}res.push_back({start, end});} if(!flag) res.push_back(intervals[sz - 1]);return res;}
};python
class Solution:def merge(self, intervals: List[List[int]]) - List[List[int]]:# 按区间列表中的每个区间x的左边界x[0]排序intervals.sort(key lambda x : x[0])merged []for interval in intervals:# 若列表为空或当前区间与上一区间不重合直接添加if not merged or merged[-1][1] interval[0]:merged.append(interval)else: # 合并merged[-1][1] max(merged[-1][1], interval[1])return merged