
算法
enjoy嚣士
一个行走在键盘上的修理工
展开
-
什么是 Trie 树
Trie 树是一个多叉字典树具体原理及实现原创 2021-01-06 11:55:32 · 149 阅读 · 0 评论 -
字符串查找,KMP算法讲解
KMP时间复杂度:O(n+m)核心点;最长公共前后缀长度数组:next若p[i-1]=p[next[i-1]],则 next[i] = next[i-1]+1具体实现原创 2021-01-06 11:53:58 · 171 阅读 · 0 评论 -
什么是跳表
二分法查找 依赖于数组的有序与随机访问,只能在数组中实现。当数据存储在链表中的时候,只需要对链表进行改造,就可以实现类似于二分的查找算法,这种改造后的链表,叫做 跳表(Skip List)。实现思路:以空间换时间,给链表制作索引,达到快速查找。具体讲解...原创 2021-01-06 11:26:55 · 216 阅读 · 0 评论 -
关于取余数的方法
代码#include<iostream>using namespace std;int main(){int size = 1024;#使用取余数符号获取cout<<(6000 % size)<<endl;#按位运算获取余数cout<<(6000 & (size-1))<<endl;return 0;}编译:g++ test.cpp运行:...原创 2020-12-30 15:31:31 · 3640 阅读 · 0 评论 -
根据Java的TreeMap集合了解红黑树
红黑树*(1)每个节点或者是黑色,或者是红色。*(2)根节点是黑色。*(3)每个叶子节点(NIL)是黑色。(注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!)*(4)如果一个节点是红色的,则它的子节点必须是黑色的。*(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。红黑树的时间复杂度O(log2(n))一棵含有n个节点的红黑树的高度至多为2log(n+1)代码示例,参考 TreeMap源码 关于再平衡...原创 2020-12-25 11:01:47 · 158 阅读 · 1 评论 -
实现LRU算法
本文参考Java 的 LinkedHashMap 集合源码数据结构:LinkedHashMap说明:LinkedHashMap中有个参数 accessOrder ,如果accessOrder为true,则 可以按访问元素的顺序 遍历元素;实现:class LRU<K, V> extends LinkedHashMap<K, V> { // 保存缓存的容量 private int capacity; public LRU(int capacity,原创 2020-12-23 18:04:04 · 174 阅读 · 0 评论 -
查找大于且最近2的幂次方的数
如题,举例,一个数为7,那么8就是它最接近的2的幂次方的数且大于7.这个算法来自Java 的 HashMap 集合 static final int tableSizeFor(int cap) { // 扩容门槛为传入的初始容量往上取最近的2的n次方 // 防止自身是2的幂次方 int n = cap - 1; // 无符号右移 n |= n >>> 1; n |= n >&原创 2020-12-23 17:43:11 · 1560 阅读 · 0 评论 -
分布式snowflake算法介绍
41位时间戳可用69年,10位工作机器id包括5位datacenterId和5位workerId12位序列号表示同一机器同一时间戳每秒可以产生4096个UID。具体介绍及应用查看: 这里...原创 2020-04-21 21:45:15 · 297 阅读 · 0 评论 -
c++ 之 计算一个数的二进制中有多少个1
#include<iostream>using namespace std;int main(){int n = 7;int m = n;unsigned int c = 0;for(c=0;n;c++){n &= (n-1);}cout<<m <<" has "<<c << " 个1"<<end...原创 2020-04-21 18:20:25 · 1492 阅读 · 0 评论 -
两个栈实现一个队列
stack1作为入队,stack2作为缓存出队时,判断stack2是否为空,空将stack1入队stack2,再从stack2弹出;不空直接弹出stack2原创 2020-04-21 21:42:35 · 134 阅读 · 0 评论