2580. 统计将重叠区间合并成组的方案数(中等)


核心思想
先按第一个元素排序,原区间重合的合并为一个,计算合并完后的区间个数。
每个区间都有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;
    }
}
posted @ 2024-04-01 18:37  Shie1d  阅读(25)  评论(0)    收藏  举报