1、基本概念

  所谓自平衡二叉树,就是当我们插入或删除元素之后,二叉树的高度会自动调整到最小,这样我们就可以在对数时间内查找二叉树内的元素。

2、定义

TreeSet<Elemtype> set=TreeSet<>();

3、基本函数

set.ceiling(x)    // 取set中大于等于x的最小值,没有就返回空
set.floor(x) // 取set中小于等于x的最大值,没有就返回空
set.size() // 返回树的大小
set.remove() // 移除树中元素
set.add() // 向树中添加元素

 

4、运用——LeetCode220题

题目描述:给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 k。

输入: nums = [1,2,3,1], k = 3, t = 0
输出: true

分析:对于这道题,我们最主要的就是运用滑动窗口,然后查找窗口内的值是否满足要求。而对于查找问题,我们使用自平衡二叉树,就可以在对数级别内实现。

算法:用自平衡二叉树保存窗口里面的值。

  • 如果树中大于等于x的最小值s,s<=x+t ,则返回true
  • 如果树中小于等于x的最大值g,x<=g+t ,则返回true
  • 将x存入树中,当树中元素大于窗口大小k,则删除最小进入树中的元素,循环直到结束。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/contains-duplicate-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
  TreeSet<Integer> set=new TreeSet<>();
  for(int i=0;i<nums.length;++i){
    Integer s=set.ceiling(nums[i]);
    if(s!=null && s<=nums[i]+t) return true;
    Integer g=set.floor(nums[i]);
    if(s!=null && nums[i]<=g+t) return true;
    set.add(nums[i]);
    if(set.size()>k){
      set.remove(nums[i-k]);
    }
  }
  return false;
}

待续未完...

Java数据结构系列(1)——自平衡二叉树的更多相关文章

  1. JAVA数据结构系列 栈

    java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...

  2. Java数据结构系列之——栈(2):栈的链式存储结构及其操作

    package Stack; import LinkList.SinglyLinkList; public class LinkListStack { private SinglyLinkList&l ...

  3. java数据结构系列——排列(2):有序阵列

    package Array; /** * 对数组排序.当添加到阵列保持有序数组元素: * @author wl * */ public class MyOrderArray { private lon ...

  4. java数据结构系列之——数组(1)

    import javax.management.RuntimeErrorException; public class MyArray { private long array[]; private ...

  5. Java数据结构系列——简单排序:泡、选择、直接进入

    package SimpleSort; public class SimpleSort { /** * 冒泡排序:每次循环过程中.小的排在后面的数会像水中的 * 气泡一样慢慢往上冒,所以命名为冒泡排序 ...

  6. 自己动手实现java数据结构(一) 向量

    1.向量介绍 计算机程序主要运行在内存中,而内存在逻辑上可以被看做是连续的地址.为了充分利用这一特性,在主流的编程语言中都存在一种底层的被称为数组(Array)的数据结构与之对应.在使用数组时需要事先 ...

  7. 《java数据结构与算法》系列之“开篇”

    大学的时候学习数据结构,当时吧虽然没挂这门课,但是确实学的不咋地,再但是其实自己一直都觉得数据结构很重要,是基础,只有基础好了,后面的路才能走的更好. 懒惰真的是天下的罪恶之源.所以一直到现在都毕业了 ...

  8. Java 集合系列 12 TreeMap

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. 一文掌握关于Java数据结构所有知识点(欢迎一起完善)

    在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫).所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以 ...

随机推荐

  1. WTM 3.1发布,完美支持.netcore 3.1

    在过去的2019年,承蒙各位的厚爱,WTM从零开始一年的时间在GitHub上收获了将近1600星,nuget上的下载量累计超过10万. WTM所坚持的低码开发,快速实现的理念受到了越来越多.netco ...

  2. TVP思享 | 四个全新维度,极限优化HTTP性能

    导语 | 当产品的用户量不断翻番时,需求会倒逼着你优化HTTP协议.那么,要想极限优化HTTP性能,应该从哪些维度出发呢?本文将由TVP陶辉老师,为大家分享四个全新维度.「TVP思享」专栏,凝结大咖思 ...

  3. mongodb学习(三)——函数使用的小技巧

    $group 下 $sum 函数 Returns a sum of numerical values. Ignores non-numeric values 只能对数字求和,非数字没有作用 查询一段时 ...

  4. java架构之路(多线程)AQS之ReetrantLock显示锁的使用和底层源码解读

    说完了我们的synchronized,这次我们来说说我们的显示锁ReetrantLock. 上期回顾: 上次博客我们主要说了锁的分类,synchronized的使用,和synchronized隐式锁的 ...

  5. 双射 - hash去重

    题目描述Two undirected simple graphs and where are isomorphic when there exists a bijection on V satisfy ...

  6. .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。

    目       录 1.      概述... 2 2.      演示信息... 2 3.      安装Docker容器... 2 4.      安装dotnet镜像... 3 5.      ...

  7. 真机调试报The executable was signed with invalid entitlements.错误

    真机运行时,提示The executable was signed with invalid entitlements.(The entitlements specified in your appl ...

  8. Java入门 - 语言基础 - 03.基础语法

    原文地址:http://www.work100.net/training/java-basic-syntax.html 更多教程:光束云 - 免费课程 基础语法 序号 文内章节 视频 1 第一个Jav ...

  9. OAuth2.0的那点荒唐小秘密 -几个简单概念和原理

    OAuth2.0这个名词你是否在项目中时常听到呢?是否觉得好像懂,又好像不太懂呢? 最近一直想写篇关于OAuth2.0的东西,记录下我的学习与感悟,然各种理由的拖延,直到今日才静下心来写下这篇博客.当 ...

  10. Hystrix 监控数据聚合 Turbine【Finchley 版】

    原文地址:https://windmt.com/2018/04/17/spring-cloud-6-turbine/ 上一篇我们介绍了使用 Hystrix Dashboard 来展示 Hystrix ...