核心思想
先按第一个元素排序,原区间重合的合并为一个,计算合并完后的区间个数。
每个区间都有2个选择,res不断乘2。
class Solution {
public int countWays(int[][] ranges) {
long res = 1;
final int MOD = (int) (1e9 + 7);
Arrays.sort(ranges, (o1, o2) -> o1[0] - o2[0]);
int cnt = 1;
int l = ranges[0][0], r = ranges[0][1];
for(int i = 1; i < ranges.length; i++){
int ll = ranges[i][0];
int rr = ranges[i][1];
if(ll >= l && ll <= r){
r = Math.max(r, rr);
}
else{
l = ll;
r = rr;
cnt ++;
}
}
for(int i = 0; i < cnt; i++){
res = res * 2;
res %= MOD;
}
return (int) res;
}
}
标签:重叠,2580,int,res,ll,合并,ranges,成组,区间
From: https://www.cnblogs.com/ganyq/p/18109152