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 } } }