算法
文章平均质量分 61
①笶侕濄
这个作者很懒,什么都没留下…
展开
-
位图算法实现
位图的使用场景 如果我们要存储1到1亿之间的数字,支持排重该如何做呢,可以采用位图。见下面的代码,用位图会极大的节省查找、插入的效率。一次位运算即可,同时也极大的节省了内存空间,现在只需1亿个2进制,即12MB左右。如果用散列表至少需要40MB public class BitMap { private int[] bits; private int limit; public BitMap(int limit) { this.limit = limit; bits = new原创 2021-04-24 17:49:49 · 107 阅读 · 0 评论 -
一致性Hash原理及其算法实现
概述 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出,设计目标是为了解决热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用 原理 现在一致性hash算法在分布式系统中也得到了广泛应用,具体在计算一致性hash时采用如下步骤: 求出服务器(节点)的哈希值,并将其配置到0~2^32-1的圆上 采用同样算法求出存储数据键的哈希值,并映射到相同的圆上 然后按数据原创 2021-03-09 20:46:01 · 153 阅读 · 0 评论 -
两数、三数之和
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍 你可以按任意顺序返回答案 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] int[] twoSum(int[] nums, int target) { int numsSize =原创 2021-03-08 20:47:09 · 103 阅读 · 0 评论 -
LRU缓存
Redis中在缓存数据时,存在淘汰机制。其中有一个LRU最近最少使用淘汰机制 LRU 缓存 设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目 它应该支持以下操作: 获取数据 get 和 写入数据 put 获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果原创 2021-03-07 14:19:10 · 195 阅读 · 0 评论 -
链表
单链表 链表技巧总结 // 对于快慢指针,定位中间元素 // 若为偶数,取中间元素时为:n/2+1 ,例如为4,则3号元素在中间 这种方式对于偶数多循环一次 // while (fast != null && fast.next != null) { // 若为偶数,取中间元素时为:n/2 ,例如为4,则2号元素在中间 // while (fast.next != null && fast.next.next != null) { 链表实体定义 @ToString @Al原创 2021-03-06 20:41:30 · 148 阅读 · 0 评论