2276统计区间的整数数目

文章探讨了如何使用数据结构如TreeMap和红黑树高效地统计区间内的整数数目,对比了暴力遍历和官方解法,并解析了红黑树的原理及在插入过程中的调整策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 题目:统计区间中的整数数目

2276. 统计区间中的整数数目

给你区间的 集,请你设计并实现满足要求的数据结构:

  • **新增:**添加一个区间到这个区间集合中。
  • **统计:**计算出现在 至少一个 区间中的整数个数。

2. 自身解法

很暴力,遍历每一个数组,用set接收,返回set的大小,最后显示空间不足

3. 官方解法

  • 用到了TreeMap,之前没用过,查了一下,主要是为了使用这个方法: Map.Entry<K,V> floorEntry(K key) 方法,返回值:小于或等于key的条目,如果没有这样的键,则返回 null

  • 其次,对于解法中while循环的理解(我最开始认为if就可以满足要求,不需要while),但是会有这种情况

在这里插入图片描述

4. 知识点解析

4.1. TreeMap

TreeMap是一个能比较元素大小的Map集合,底层是红黑树结构,会对传入的key进行了大小排序。其中,可以使用元素的自然顺序(也是相当于实现了Comparator),也可以使用集合中自定义的比较器来进行排序
在这里插入图片描述

TreeMap具有如下特点:

  • 不允许出现重复的key
  • 可以插入null键,null值;
  • 可以对元素进行排序;
  • 插入和遍历顺序不一致;

常用的方法:Java.util.TreeMap 类 (w3schools.cn)

4.2 二叉搜索树

平衡二叉搜索树(AVL)详解_二叉检索树avl树-优快云博客

4.3 平衡二叉搜索树 AVL树(因发明人得名)

平衡二叉搜索树(AVL)详解_二叉检索树avl树-优快云博客

4.4 红黑树

4.4.1 含义

红黑树,本质上依旧一颗二叉查找树,它满足了二叉查找树的特点,即左子树任意节点的值永远小于右子树任意节点的值。

AVL树用左右子树的高度差来保持着树的平衡。红黑树,用的是节点的颜色来维持树的平衡。

4.4.2 要求

在这里插入图片描述

一颗红黑树必须满足一下几点要求:

  1. 树中每个节点必须是有颜色的,要么红色,要么黑色;
  2. 树中的根节点必须是黑色的;
  3. 树中的树尾的NIL节点或者为null的节点必须是黑色的;
  4. 树中任意一个节点如果是红色的,那么它的两个子节点一点是黑色的;
  5. 任意节点到叶子节点的每一条路径所包含的黑色节点数目一定相同;

科普:NIL节点是就是一个假想的或是无实在意义的节点,所有应该指向NULL的指针,都看成指向了NIL节点,包括叶节点的子节点指针或是根节点的父指针(均是指向null的)

红黑树节点的结构:包含以下几个属性

在这里插入图片描述

4.4.3 红黑树节点添加

在将一个节点插入到红黑树中,首选需要将红黑树当做一颗二叉树查找树来对待,将节点进行插入。然后,为新插入的节点进行着色;最后,通过旋转和重新着色的方式来修正树的平衡,使其成为一颗红黑树;

(1)对于红黑树来说,其底层依旧是一颗二叉查找树。当我们插入新的元素时,它依旧会对该元素进行排序比较,将其送入到左子树或者是右子树中。

(2)在将新节点安置好以后,在对其进行着色处理,必须着成红色

为什么要着成红色,而不是黑色呢?——当将新增节点着成红色后,我们违背以上红黑树的要求的条数最少,恢复平衡起来最省事

后,在对其进行着色处理,必须着成红色

为什么要着成红色,而不是黑色呢?——当将新增节点着成红色后,我们违背以上红黑树的要求的条数最少,恢复平衡起来最省事

Java集合–TreeMap完全解析 - 简书 (jianshu.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值