【LeetCode】56. 合併區間

題目概述

  給出一個區間的集合,請合併所有重疊的區間。

示例 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章