数据结构和算法
文章平均质量分 60
莱特昂
这个作者很懒,什么都没留下…
展开
-
一致性哈希实现
一致性Hash算法引入了一个虚拟节点机制,即对每个服务器节点计算出多个hash值,它们都会映射到hash环上,映射到这些虚拟节点的对象key,最终会缓存在真实的节点上。引入虚拟节点的同时也增加了新的问题,要做虚拟节点和真实节点间的映射,对象key->虚拟节点->实际节点之间的转换。想到之前十亿数据迁移的时候用到了哈希分桶,当时有同步验证一致性哈希的性能,这里记录下一致性哈希的实现方法。实现一致性哈希算法主要是为了均衡的分桶,为了避免数据倾斜的问题,加入了虚拟节点。哈希算法用的是MurMurHash3。原创 2024-09-05 15:52:21 · 235 阅读 · 0 评论 -
链表有环,快慢指针走3步可以吗
先说结果,可以走三步,但没必要,反而会影响效率。下面是推导过程,摘自stackflow。设非环的部分走了s步,环t步,快指针速度是慢指针的k倍,快慢指针在距离环开头的 j 步处相遇。那么,相遇时,慢指针走了s+j,快指针走了s + j + m * t,(m是快指针在环中的圈数)此时,快指针走的距离时慢指针的k倍,则有等式:变换一下:根据上面的公式可知,等式左边是慢指针走的步数,是等式右边环长度的倍数,慢指针步数s + j是整数,环长度t也是整数,(m / k-1)中,k-1>0,在其他量都确定的情况原创 2022-06-23 16:36:43 · 1103 阅读 · 1 评论 -
位运算的知识
今天做了道位运算的题,在本地IDE试了下对1取反,用~n,发现结果竟然是-2,有点难以理解。所以查了下相关知识,记录一下。(按位取反)运算的理解:按照我平时的理解,当我使用按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是按位取反的运算结果(这点没问题)例如,假如我的计算机是32位的,我接下来要计算~5的值,计算过程如下:5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101执行运算,即5后: 1111原创 2020-08-19 17:52:47 · 199 阅读 · 0 评论 -
(算法题)两条不相交的线
同学面试华为手撕算法的一道题目。直接给我的时候我是懵的,面试官也提醒了动态规划和方程,可带着这样的思路也没想起来,想着怎么这么难。后来吃完饭闲来无事网上查了一下,发现竟然是Leetcode的原题,看了一下思路,恍然大悟,原来原理和最长公共字符串的思路一样!所以特地来记录一下。题目:(Leetcode 1035)我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他原创 2020-08-14 22:33:34 · 7288 阅读 · 2 评论 -
栈的三种实现方式(C++)
一、基于deque实现优点:利用deque动态管理内存,栈的内存无上限,STL中的栈也是基于deque实现的。 template<class T> class MyStack{ deque<T> dq; public: void push(T element){ dq.push_back(element); } void pop(){ assert(!empty()); dq.pop_原创 2020-07-27 22:50:35 · 738 阅读 · 0 评论 -
计算最大公约数最小公倍数(C++实现)
华为的一道机考题,记录一下思路手下是数学方法解析,算最小公倍数,需要用到最大公约数。首先将用计算机算法算最大公约数的原理。最大公约数辗转相除法(欧几里得 Euclidean) 用“较大数”除以“较小数”,再用较小数除以第一余数,再用第一余数除以第二余数;反复直到余数为零为止。 图解: 代码实现://迭代int gcd(int a, int b) // greatest common divisor 最大公约数{ while(a%b){ int tmp原创 2020-07-24 17:09:30 · 2345 阅读 · 0 评论 -
解释二叉树深度和高度
今天小伙伴在群里问到,面试官问这个问题。我第一印象,这不是一回事吗? 去查了查,竟然还真有区别,所以在此记录一下。高度和深度是相反的表示,深度是从上到下数的,而高度是从下往上数。我们先来看看高度和深度的定义,某节点的深度是指从根节点到该节点的最长简单路径边的条数,而高度是指从该节点到叶子节点的最长简单路径边的条数。所以树的深度和高度是相等的,而对其他节点来说深度和高度不一定相等。注意:这里边的条数是规定根节点的深度和叶子节点的高度是0;(也可规定为1)如 B和C节点深度都为1,因为从根节点到到该原创 2020-07-09 18:51:27 · 5242 阅读 · 0 评论
分享