java.lang.Object
g2501_2600.s2580_count_ways_to_group_overlapping_ranges.Solution

public class Solution extends Object
2580 - Count Ways to Group Overlapping Ranges.<p>Medium</p> <p>You are given a 2D integer array <code>ranges</code> where <code>ranges[i] = [start<sub>i</sub>, end<sub>i</sub>]</code> denotes that all integers between <code>start<sub>i</sub></code> and <code>end<sub>i</sub></code> (both <strong>inclusive</strong> ) are contained in the <code>i<sup>th</sup></code> range.</p> <p>You are to split <code>ranges</code> into <strong>two</strong> (possibly empty) groups such that:</p> <ul> <li>Each range belongs to exactly one group.</li> <li>Any two <strong>overlapping</strong> ranges must belong to the <strong>same</strong> group.</li> </ul> <p>Two ranges are said to be <strong>overlapping</strong> if there exists at least <strong>one</strong> integer that is present in both ranges.</p> <ul> <li>For example, <code>[1, 3]</code> and <code>[2, 5]</code> are overlapping because <code>2</code> and <code>3</code> occur in both ranges.</li> </ul> <p>Return <em>the <strong>total number</strong> of ways to split</em> <code>ranges</code> <em>into two groups</em>. Since the answer may be very large, return it <strong>modulo</strong> <code>10<sup>9</sup> + 7</code>.</p> <p><strong>Example 1:</strong></p> <p><strong>Input:</strong> ranges = [[6,10],[5,15]]</p> <p><strong>Output:</strong> 2</p> <p><strong>Explanation:</strong></p> <p>The two ranges are overlapping, so they must be in the same group.</p> <p>Thus, there are two possible ways:</p> <ul> <li> <p>Put both the ranges together in group 1.</p> </li> <li> <p>Put both the ranges together in group 2.</p> </li> </ul> <p><strong>Example 2:</strong></p> <p><strong>Input:</strong> ranges = [[1,3],[10,20],[2,5],[4,8]]</p> <p><strong>Output:</strong> 4</p> <p><strong>Explanation:</strong></p> <p>Ranges [1,3], and [2,5] are overlapping. So, they must be in the same group.</p> <p>Again, ranges [2,5] and [4,8] are also overlapping. So, they must also be in the same group.</p> <p>Thus, there are four possible ways to group them:</p> <ul> <li> <p>All the ranges in group 1.</p> </li> <li> <p>All the ranges in group 2.</p> </li> <li> <p>Ranges [1,3], [2,5], and [4,8] in group 1 and [10,20] in group 2.</p> </li> <li> <p>Ranges [1,3], [2,5], and [4,8] in group 2 and [10,20] in group 1.</p> </li> </ul> <p><strong>Constraints:</strong></p> <ul> <li><code>1 <= ranges.length <= 10<sup>5</sup></code></li> <li><code>ranges[i].length == 2</code></li> <li><code>0 <= start<sub>i</sub> <= end<sub>i</sub> <= 10<sup>9</sup></code></li> </ul>
  • Constructor Details

    • Solution

      public Solution()
  • Method Details

    • countWays

      public int countWays(int[][] ranges)