数据结构
面试宝典
左林右李02
mt实时数据平台研发
展开
-
反转单链表
反转单链表原创 2024-01-31 19:32:25 · 154 阅读 · 0 评论 -
Hyperloglog去重
虽然这种算法能大大地减少存储开销,但是随着数据量的增大,它依然面临着存储上的压力。在本篇文章中将要介绍的 HyperLogLog(下称 HLL)是一种非精确的去重算法,它的特点是具有非常优异的空间复杂度(几乎可以达到常数级别)。HLL 算法需要完整遍历所有元素一次,而非多次或采样;该算法只能计算集合中有多少个不重复的元素,不能给出每个元素的出现次数或是判断一个元素是否之前出现过;多个使用 HLL 统计出的基数值可以融合。HLL 算法有着非常优异的空间复杂度,可以看到它的空间占用随着基数值的增长并没转载 2021-08-10 18:17:24 · 410 阅读 · 0 评论 -
hyperloglog原理
思路概述抛硬币的概率->字符串取hash之后也是01序列,也可看做抛硬币的结果->抛几次(集合中有几个元素)会出现这种前导0->不精确,所以分桶->前导0的个数直接求平均偏差大,所以求调和平均->细节微调(分桶数、constant值等)...转载 2021-08-08 23:51:00 · 217 阅读 · 0 评论 -
二叉树专题
二叉树专题层次遍历层次遍历思路:借助队列,打印当前节点值时,将其leftNode和rightNode入队。其中Java中队列的实现类是LinkListpublic void levelTraverse(TreeNode head){ if(head==null) return; Queue<TreeNode> queue=new LinkList<TreeNode>(); queue.offer(head); while(!queue.isEmpty()){原创 2021-05-23 14:31:40 · 95 阅读 · 0 评论 -
用数组存放树
用数组存放树概念介绍满二叉树和完全二叉树存储树的两种方式链式存储法基于数组的循序存储法二叉树层次遍历概念介绍满二叉树和完全二叉树上图中,编号 2 和编号 3 这两个二叉树是比较特殊的。编号 2 的二叉树,叶子节点全在最底层,除了叶子节点之外,每个节点都有左右两个子节点,这种二叉树就叫作满二叉树。编号 3 的二叉树中,叶子节点都在最底下两层,最后一层的叶子节点都靠左排列(最后一层的节点之间不能有空隙,从左到右不能有空隙),并且除了最后一层,其他层的节点个数都要达到最大,这种二叉树叫作完全二叉树。原创 2021-03-29 21:15:55 · 2755 阅读 · 1 评论 -
链表常见问题
链表常见问题判断单链表是否有环二级目录三级目录判断单链表是否有环思路:快慢指针,慢指针每次移动一步,快指针每次移动两步,如果存在环,那么两个指针一定会在环内相遇二级目录三级目录...原创 2021-03-20 14:43:19 · 95 阅读 · 0 评论 -
链表转二叉平衡树
public class Link2BST { class LinkNode { int value; LinkNode nextNode; } class TreeNode { int value; TreeNode leftNode; TreeNode rightNode; public TreeNode(int value) { this.value =原创 2021-03-20 00:09:48 · 157 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题问题描述:解法一、使用数组求解问题描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出圈;他的下一个人又从 1 开始报数,数到 m 的那个人又出圈;依此规律重复下去,直到剩余最后一个胜利者。解法一、使用数组求解public class JCircle { public void circleCount(int n, int k) { //报数器原创 2021-03-16 20:22:08 · 84 阅读 · 0 评论 -
由0-5的随机数,生成0-90的随机数
问题:由0-5的随机数,生成0-90的随机数解决思路:进制转换,0-5的随机数生成3位,最大值就是4 * 5 ^ 2 + 4 * 5 ^ 1 + 4 * 5 ^ 0 = 124生成三位随机的0-5,然后再做判断,和330(90对应的5进制)做比较,剔除>330的数据...原创 2020-12-21 21:05:10 · 2082 阅读 · 0 评论 -
RoaringBitmap原理和应用
设计思路我们以存放 Integer 值的 Bitmap 来举例(存放Long类型的存储方式会有所不同),RBM 把一个 32 位的 Integer 划分为高16 位和低16 位,通过高16位找到该数据存储在哪个桶中(高 16 位可以划分 2^16 个桶),把剩余的低 16 位放入该桶对应的 Container 中。每个桶都有对应的 Container,不同的 Container 存储方式不同。依据不同的场景,主要有 3 种不同的 Container,分别是 ArrayContainer 、 Bitmap原创 2020-09-06 16:13:57 · 1309 阅读 · 0 评论 -
bitset详解
bitset详解Java的BitSet使用一个Long(一共64位)的数组中的没一位(bit)是否为1来表示当前Index的数存在不。但是BitSet又是如何实现的呢?其实只需要理解其中的两个方法:setgetset先看源代码:public void set(int bitIndex) { if (bitIndex < 0) throw new Ind...原创 2020-02-10 10:49:58 · 769 阅读 · 1 评论