自适应平台网站模板天元建设集团有限公司青岛分公司
news/
2025/9/22 23:42:24/
文章来源:
自适应平台网站模板,天元建设集团有限公司青岛分公司,建设部网站注册师,一个人可以看片2023.12.16 题目来源我的题解方法一 线段树#xff08;借鉴官方题解评论区 知白守黑#xff09; 题目来源
力扣每日一题#xff1b;题序#xff1a;2276
我的题解
方法一 线段树#xff08;借鉴官方题解评论区 知白守黑#xff09; 用一棵平衡二叉搜索树维护插入的区间… 2023.12.16 题目来源我的题解方法一 线段树借鉴官方题解评论区 知白守黑 题目来源
力扣每日一题题序2276
我的题解
方法一 线段树借鉴官方题解评论区 知白守黑 用一棵平衡二叉搜索树维护插入的区间树中的区间两两不相交。当插入一个新的区间时需要找出所有与待插入区间有重合整数的区间将这些区间合并成一个新的区间后插入平衡树里。间隔包含两个属性左端点 l 和右端点 r其中左端点在树中参与排序。当插入一个新的间隔 add(left,right)时需要找到树中的最大的间隔 interval满足interval.l≤right这个是可能与待插入的间隔相交的最大的间隔如果相交则将它们合并并且继续寻找下一个这样的间隔直到不存在这样的间隔或者找到的间隔与待插入的间隔不相交。同时用一个整数 cnt 维护树中的间隔覆盖的整数当调用 count时直接返回即可。 时间复杂度add 的均摊时间复杂度为 O(logn)其中 n是调用 add的次数因为每个区间最多只会被加入和删除一次单次加入和删除的时间复杂度是 O(logn)。单次 add\textit{add}add 的复杂度最差情况是 O(n×logn)。count 的时间复杂度是 O(log1)。 空间复杂度O(1) public class CountIntervals {TreeMapInteger, Integer map;int cnt;public CountIntervals() {map new TreeMap();cnt 0;}public void add(int left, int right) {Integer key map.floorKey(right);//返回小于等于right的最大的那个keywhile (key ! null left map.get(key)) {//当它们区间有重叠时left Math.min(left, key);right Math.max(right, map.get(key));cnt - (map.get(key) - key) 1;//合并区间之后,要减去原来加上去的值map.remove(key);//移除原区间key map.floorKey(right);}cnt (right - left) 1;map.put(left, right);}public int count() {return cnt;}}困难题……不会啦这里搬官方题解和评论区大佬的代码
有任何问题欢迎评论区交流欢迎评论区提供其它解题思路代码也可以点个赞支持一下作者哈~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910772.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!