56. 合并区间

bool f(const vector<int>&a,const vector<int>&b) {
    if(a[0]==b[0])return a[1]<b[1];return a[0]<b[0];
}
class Solution {
public:
    vector<vector<int>>res;
    vector<vector<int>> merge(vector<vector<int>>& v) {
        sort(v.begin(),v.end(),f);
        int l = v[0][0], r = v[0][1];
        for ( int i = 1; i < v.size(); i ++ ) {
            if (v[i][0]<=r) r = max(r,v[i][1]);
            else {
                res.push_back(vector<int>{l, r});
                l = v[i][0];
                r = v[i][1];
            }
        }
        res.push_back(vector<int>{l, r});
        return res;
    }
};

这个 很直接

#![allow(unused)]
fn main() {
struct Solution {}
impl Solution {
    pub fn merge(mut intervals: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
        let mut res: Vec<Vec<i32>> = Vec::new();
        intervals.sort_by_key(|v| v[0]);
        let mut left: i32 = intervals[0][0];
        let mut right: i32 = intervals[0][1];
        intervals.iter().skip(1usize).for_each(|v| {
            if v[0] <= right {
                right = std::cmp::max(v[1], right);
            } else {
                // non overlap
                res.push(vec![left, right]);
                left = v[0];
                right = v[1];
            }
        });
        res.push(vec![left, right]);
        res
    }
}
}