題目概述
給出一個區間的集合,請合併所有重疊的區間。
示例 1:
輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併爲 [1,6].
示例 2:
輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視爲重疊區間。
實現思想
思想也就很簡單,首先按照二維數組裏面的一維數組的第一個元素排序,這個時候比較上一個一維數組的末尾元素(比如[1,3]
中的3
)與下一個一維數組的第一個元素(比如[2,6]
中的2
)大小,然後判斷是否要合併。
C++實現
class Solution {
public:
static bool cmp(vector<int> num1, vector<int> num2){
return num1[0]<num2[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if(intervals.size()<2) return intervals;
sort(intervals.begin(), intervals.end(),cmp);
int n = intervals.size();
vector<vector<int>> ans;
ans.push_back(intervals[0]);
for(int i=1; i<n; ++i){
if(ans.back()[1] >= intervals[i][0]){
ans.back()[1] = max(ans.back()[1], intervals[i][1]);
} else {
ans.push_back(intervals[i]);
}
}
return ans;
}
};
這裏要注意:
static bool cmp(vector<int> num1, vector<int> num2){
return num1[0]<num2[0];
之所以要加static
的原因是:使用了函數指針,而函數指針所指函數須得是靜態才行。如果不加的話,報錯如下:
fatal error: reference to non-static member function must be called