1. 题意
将区间合并成不重叠的区间,再分成两组。求方案数。
2. 题解
只是计算一下方案书
从 n n n里面选 k k k分为两组。
实际上方案数就是
a n s = ∑ k = 0 n ( n k ) = 2 n ans = \sum_{k=0}^n{n \choose k}=2^n ans=k=0∑n(kn)=2n
2.1 代码
class Solution {
public:
int countWays(vector<vector<int>>& ranges) {
// for (int i = 0; i < ranges.size(); i++) {
// for (int j = 0; j < ranges.size() - i - 1; j++) {
// if (ranges[j][0] > ranges[j + 1][0]) {
// vector<int> temp=ranges[j+1];
// ranges[j+1]=ranges[j];
// ranges[j]=temp;
// }
// }
// }
sort(ranges.begin(), ranges.end());
// for (auto &range:ranges) {
// std::cout << range[0] << ":" << range[1] << std::endl;
// }
int max_num = ranges[0][1], ans = 1;
int MOD = 1e9 + 7;
for (int i = 1; i < ranges.size(); i++) {
if (ranges[i][0] <= max_num) {
max_num = max(ranges[i][1],max_num);
} else {
ans = (ans * 2) % (MOD);
max_num = ranges[i][1];
}
}
return (ans * 2) % (MOD);
}
};