## 1288. Remove Covered Intervals

Given a list of `intervals`, remove all intervals that are covered by another interval in the list.

Interval `[a,b)` is covered by interval `[c,d)` if and only if `c <= a` and `b <= d`.

After doing so, return the number of remaining intervals.

Example 1:

```Input: intervals = [[1,4],[3,6],[2,8]]
Output: 2
Explanation: Interval [3,6] is covered by [2,8], therefore it is removed.
```

Example 2:

```Input: intervals = [[1,4],[2,3]]
Output: 1
```

Example 3:

```Input: intervals = [[0,10],[5,12]]
Output: 2
```

Example 4:

```Input: intervals = [[3,10],[4,10],[5,11]]
Output: 2
```

Example 5:

```Input: intervals = [[1,2],[1,4],[3,4]]
Output: 1
```

Constraints:

• `1 <= intervals.length <= 1000`
• `intervals[i].length == 2`
• `0 <= intervals[i][0] < intervals[i][1] <= 10^5`
• All the intervals are unique.

## Rust Solution

``````struct Solution;
use std::cmp::Reverse;

impl Solution {
fn remove_covered_intervals(mut intervals: Vec<Vec<i32>>) -> i32 {
intervals.sort_by_key(|v| (v[0], Reverse(v[1])));
let n = intervals.len();
let mut r = -1;
let mut res = 0;
for i in 0..n {
let interval = &intervals[i];
if interval[1] <= r {
continue;
} else {
r = interval[1];
res += 1;
}
}
res
}
}

#[test]
fn test() {
let intervals = vec_vec_i32![[1, 4], [3, 6], [2, 8]];
let res = 2;
assert_eq!(Solution::remove_covered_intervals(intervals), res);
}
``````

Having problems with this solution? Click here to submit an issue on github.