2023-12-16每日一题
一、题目编号
2276. 统计区间中的整数数目
二、题目链接
点击跳转到题目位置
三、题目描述
给你区间的 空 集,请你设计并实现满足要求的数据结构:
**新增:**添加一个区间到这个区间集合中。
**统计:**计算出现在 至少一个 区间中的整数个数。
实现 CountIntervals 类:
CountIntervals() 使用区间的空集初始化对象
void add(int left, int right) 添加区间 [left, right] 到区间集合之中。
int count() 返回出现在 至少一个 区间中的整数个数。
**注意:**区间 [left, right] 表示满足 left <= x <= right 的所有整数 x 。
示例 1:
提示:
- 1 <= left <= right <= 109
- 最多调用 add 和 count 方法 总计 105 次
- 调用 count 方法至少一次
四、解题代码
class CountIntervals {
public:CountIntervals() {}void add(int left, int right) {auto interval = mp.upper_bound(right);if (interval != mp.begin()) {interval--;}while (interval != mp.end() && interval->first <= right && interval->second >= left) {int l = interval->first, r = interval->second;left = min(left, l);right = max(right, r);cnt -= r - l + 1;mp.erase(interval);interval = mp.upper_bound(right);if (interval != mp.begin()) {interval--;}}cnt += (right - left + 1);mp[left] = right;}int count() {return cnt;}
private:int cnt = 0;map<int, int> mp;
};
五、解题思路
(1) 平衡二叉搜索树