摘要: ConcurrentHashmap是java并发编程中的一部分,提供了一种线程安全的哈希表实现。它允许多个线程并发读写,提高了并发性能。 1、数据结构 底层数据结构是一个数组,数组中的每个元素是一个Node(或是链表或是树)。每个Node节点包含键值对以及指向下一个节点的引用。 2、分段锁机制 采用 阅读全文
posted @ 2024-05-19 22:29 翻斗花园小美Q 阅读(2) 评论(0) 推荐(0) 编辑
摘要: P 字母这一行 表示的是每个柱子左边柱子的最大高度(从i=1开始) S字母这一行 表示的是每个柱子右边柱子的最大高度 (从 length - 2开始,倒着更新) 由上图可见,取min(maxLeft[下标],maxRight[下标]) 再减去此柱子本身的高度,就是每个柱子(水桶)能接多少单位的水。 阅读全文
posted @ 2024-04-29 16:20 翻斗花园小美Q 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 新建一个总的结果集,类型为List<List<Integer>> 新建一个方法: 新建队列作为辅助 先把根节点加入到队列中 记录队列的长度,将每一层的结点记录下来,根据记录的长度弹出每一层的结点,存成List类型 每一层弹出之后,加入到总的结果集中 阅读全文
posted @ 2024-04-02 17:38 翻斗花园小美Q 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 结点的度:树中每个结点具有的子树数或者后继结点数称为该结点的度 分支结点:度大于0的结点称为分支结点或非终端结点。度为1的结点称为单分支结点,度为2的结点称为双分支结点... 树的度:树中所有结点的度的最大值称之为树的度。 叶子结点(叶节点):度为0的结点称为叶子结点或终端结点 孩子结点、双亲结点( 阅读全文
posted @ 2024-03-28 10:47 翻斗花园小美Q 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 实例: 阅读全文
posted @ 2024-03-28 10:46 翻斗花园小美Q 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 使用PriorityQueue来实现堆的功能 PriorityQueue是Java提供的优先级队列,可以作为堆的一种实现方式。默认情况下,PriorityQueue是一个小顶堆。 在给定的代码中,通过创建PriorityQueue<Integer>对象并传入自定义的比较器,我们可以实现根据元素的频率 阅读全文
posted @ 2024-03-27 21:25 翻斗花园小美Q 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 创建一个双端队列 deque 来存储滑动窗口中的元素的索引。 for (int i = 0; i < k; ++i) {//也可以用if进行替换 while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) { deque.pollLas 阅读全文
posted @ 2024-03-27 19:20 翻斗花园小美Q 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 结合栈与队列,请详细说一下Deque都有什么方法: Deque 接口(Double Ended Queue,双端队列)提供了一系列方法,既可以用作栈,也可以用作队列。下面是 Deque 接口中常用的方法: 栈操作方法: void push(E e): 将元素推入栈顶。 E pop(): 弹出栈顶元素 阅读全文
posted @ 2024-03-27 16:41 翻斗花园小美Q 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 队列是先进先出,栈是先进后出。 在Java中,栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。以下是栈的基本操作以及对应的方法: 入栈(Push):将元素添加到栈的顶部。对应方法:push(E item),将元素 item 推入栈顶。 出栈(Pop):从栈的顶部移除并返回元素。对应方法 阅读全文
posted @ 2024-03-25 22:25 翻斗花园小美Q 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 思路: 先构建一个虚拟头结点,指向真正的头结点,让快慢指针都指向虚拟头结点 快指针从虚拟头结点开始后移,移动 n+1 步,即for循环中跳出条件写成 i<=n,正好满足 i=0 时,f 指向索引0的位置 for循环执行完毕之后,f 指针指向的就是第n个结点,此时 f 和 s 指针开始同时移动,当 f 阅读全文
posted @ 2024-03-24 22:12 翻斗花园小美Q 阅读(2) 评论(0) 推荐(0) 编辑