leetcode 56. 合并区间

85 阅读1分钟

c++

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> arr;
        vector<int> temp(2);
        for (auto x : intervals) {
            temp[0] = x[0];
            temp[1] = 1;
            arr.push_back(temp);
            temp[0] = x[1];
            temp[1] = -1;
            arr.push_back(temp);
        }
        sort(arr.begin(), arr.end(), 
            [](const vector<int> &a, const vector<int> &b) -> bool {
                if (a[0] - b[0]) return a[0] < b[0];
                return a[1] > b[1];
            });
        int pre = -1, sum = 0;
        vector<vector<int>> ans;
        for (int i = 0; i < arr.size(); i++) {
            if (pre == -1) pre = arr[i][0];
            sum += arr[i][1];
            if (sum == 0) {
                temp[0] = pre;
                temp[1] = arr[i][0];
                ans.push_back(temp);
                pre = -1;
            }
        }
        return ans;
    }
};

js

var merge = function(intervals) {
    var arr = new Array(intervals.length * 2).fill(0).map(()=> new Array(2).fill(0)), temp = new Array(2).fill(0);
    var k = 0;
    for (var x of intervals) {
        arr[k][0] = x[0];
        arr[k++][1] = 1;
        arr[k][0] = x[1];
        arr[k++][1] = -1;
    }
    arr.sort(function(a, b) {
        if (a[0] - b[0]) {
            return a[0] - b[0];
        }
        return b[1] - a[1];
    });
    var pre = -1, sum = 0, ans = new Array(intervals.length * 2).fill(0).map(()=>new Array(2).fill(0));
    var cnt = 0;
    for (var i = 0; i < arr.length; i++) {
        if (pre == -1) pre = arr[i][0];
        sum += arr[i][1];
        if (sum == 0) {
            ans[cnt][0] = pre;
            ans[cnt][1] = arr[i][0];
            cnt++;
            pre = -1;
        }
    }
    return ans.slice(0, cnt);
};