算法
文章平均质量分 67
liberg
JAVA/大数据/前端(Web/H5/Android)
展开
-
1亿个手机号如何排序?
文章目录问题分析步骤问题之前有朋友问了一个问题,说101010万个手机号怎么排序。我说101010万个太少了,读到数组中,直接排就行了。今天突然想到一个问题,如果是1亿个手机号怎么排序呢?分析先来理清一下需求:有1亿个不重复的手机号,按行存放在一个大文件mobiles_in.txt中,要求将手机号由小到大排好序的结果输出到另一个文件mobiles_sorted.txt中。1个手机号11位数字,再加上换行符(\r\n),一行是13个byte,1亿个手机号的文件大小是13亿byte,大概是1.2原创 2021-05-26 17:59:52 · 1525 阅读 · 0 评论 -
LFU缓存O(1)高效Java实现
LFU(Least Frequently Used,最不经常使用),是一种常用的缓存更新/淘汰算法。本文探讨一种get/putget/putget/put时间复杂度均是O(1)O(1)O(1)的高效实现方法。实现思路先来实现一个环形双向链表:链表实现了在尾部添加元素(addLast)和头部删除元素(removeFirst)的功能。下文中的两重链表都是通过环形双向链表来做的。// 环形双向链表实现public static class LinkedNode { Node head;原创 2021-05-22 19:59:58 · 300 阅读 · 1 评论 -
深入解析Integer.bitCount()源码
以位运算和分治归并思想作为切入口,深入探讨java.lang.Integer#bitCount()方法的实现源码。原创 2021-03-23 18:30:15 · 641 阅读 · 0 评论 -
蓝桥杯题目:方格计数
群里有小伙伴分享了一道蓝桥杯的题目:乍一看,以为会有什么巧妙的解法。实则是一道暴力求解题。根据对称性,先求得第一象限内满足条件的小方格数,再乘以4即得到答案;第一象限内,每个小方格的右上顶点,是这个小方格上距离圆心最远的点。即是说右上顶点在圆内,小方格也会在圆内。(想想为什么?不妨设右上顶点坐标为(p,q)(p>=1,q>=1),则其余3个顶点坐标分别为(p-1,q-1),(p,q-1),(p-1,q))每个右上顶点刚好一一对应到一个小方格。根据点在圆内的理论:原创 2021-03-10 12:33:07 · 502 阅读 · 1 评论 -
2020滴滴面试算法题:垃圾分类
垃圾分类最近很多城市都搞起了垃圾分类,已知有一个小区有 n堆垃圾需要丢弃,这些垃圾都打包了,我们并不知道这是什么垃圾,要知道有些垃圾如果丢在一起是会影响环境的。这个小区一共只有两辆垃圾车,我们希望在不影响环境的情况下,每次让垃圾车载走最多的垃圾,但是因为两位司机师傅有矛盾,所以两辆车装的垃圾数目一定要相同,不然其中一位司机师傅就会不开心。我们为垃圾袋标了号,分别是 1-n,有 m 个约束,每个约束表示为“a b”,意思是第a堆垃圾与第b堆垃圾不能装在一辆垃圾车上。(每堆垃圾最多有两个约束条件)请问两辆原创 2021-02-23 22:15:08 · 792 阅读 · 0 评论 -
(刷题必备)并查集详解+Java模板代码
并查集的简单介绍并查集模板代码保证性能的两个启发式策略:路径压缩和按秩合并时间复杂度介绍Ackermann(4,1)到底有多大何谓并查集并查集,在《算法导论》中的术语是“用于不相交集合的数据结构”。比较抽象,笔者觉得还不如“并查集”来的好理解。先举个简单的例子来直观感受一下“并查集”解决的问题:假设有编号分别为0,1,2,3,4,5的6个人,告诉你0和4是一伙儿的,2和3同属一伙,3和5同属一伙,请问一共有几个团伙?这个问题可以靠简单推理得出答案。但是如果原创 2021-01-24 19:36:34 · 2204 阅读 · 0 评论 -
很大、大得离谱的数。。。
很大、大得离谱的数。。。先来定义超运算:a[n]b,n为正整数其中,a称为底数,b为超指数,n为阶数。递归定义为:a[1]b = a + b;//规定超1阶运算,相当于a+b个1a[n]b = a[n-1]a[n-1]a...a[n-1]a,其中一共有b个a,从右往左计算a[1]b = a + ba[2]b = a[1]a[1]a...a[1]a(b个a) = a+a+...+a(b个a) = b×aa[3]b = a×a×...×a(b个a) = a^ba[4]b = a(a((a…)原创 2021-01-23 19:32:44 · 784 阅读 · 0 评论 -
深入拆解:Hash函数、Bitmap位图、BloomFilter布隆过滤器
Hash函数byte[] hash(String inData)hash函数的特点:(1)输入域可以是无穷大的。(2)输出域是有限的,比如输出长度固定为64bit、128bit、256bit、512bit等等,以达到压缩数据、提取指纹的目的。(3)没有任何随机机制,相同的输入得到相同的输出。(4)有可能出现输入不同输出相同(Different in–>Same out),这种情况叫做哈希碰撞。(5)最重要的特点:输出值尽可能均匀散列(离散性和均匀性,其实是一回事)到输出域上。- 输入原创 2020-06-07 12:56:02 · 346 阅读 · 0 评论 -
如何产生足够的UUID?
UUID,是指通用唯一标识符,Universally Unique Identifier。首先说明一下题意,类似雪花算法(SnowFlake)这种方式,因为生成的结果长度是固定的(64bit),因此,只能产生有限个UUID。如果要在一个大的集群,或者说全世界范围内产生足够多的UUID,可以怎么做呢?第一步,假设有一个全局的Leader机(可以做成主备),它负责向各个一级机构(比如国家)批量分配连续的UUID。这里用String类型来表示一个10进制数,分配的时候指定开始值和分配数量即可。第二原创 2020-06-06 17:05:56 · 171 阅读 · 1 评论 -
算法04_二叉树
二叉树是非线性的逻辑结构。从根节点开始,每个节点都可能有左孩子、右孩子。平衡二叉树:搜索二叉树:完全二叉树:满二叉树:层数L和总节点数N,满足关系N=2^L-1完全二叉树性质:根节点从1开始,按照宽度优先的顺序给所有节点进行编号:第i个节点的左孩子:2i第i个节点的右孩子:2i+1...原创 2020-05-09 23:24:21 · 115 阅读 · 0 评论 -
算法03_栈、队列
文章目录1,概念2,底层数据结构3,题目1. 如何实现一个栈,除了提供栈的基本操作外,还提供一个获取栈中最小元素的方法getMin(),要求此方法的时间复杂度为O(1)。2. 如何只通过栈来实现队列?3. 如何只通过队列来实现栈?1,概念栈:后进先出(想象一个弹夹、或者桶,后放进去的元素,先被取出来),push、pop队列:先进先出(排队,先来先服务),add、poll2,底层数据结构底...原创 2020-04-29 22:35:43 · 109 阅读 · 0 评论 -
位运算“奇技淫巧”大总结(算法进阶)
交换a、b两个数的值(一般不建议使用)2n、2n+1和n/22*n 等价于 n<<12*n+1等价于 n<<1|1n/2 等价于 n>>1N&((~N)+1) 这是个啥结果?这个结果是,将二级制的N,其最右边一个为1的位保留成1,其他位全变成0的数。...原创 2020-04-28 13:25:04 · 1406 阅读 · 0 评论 -
算法01_时间复杂度
什么是算法算法,通俗来说,就是被设计出来用于解决某个或某类问题,具有一定通用性的计算流程和方法。解决某个问题,通常有不止一种算法。评价一个算法的优劣,从3个方面进行考察:时间复杂度额外空间复杂度常数时间时间复杂度通常用最坏时间复杂度(大写O)来表示一个算法的时间复杂度。通常估计一个算法的时间复杂度是这样进行的:将算法的执行过程拆分成一个个的常数时间操作,然后计算所有常数时间操作...原创 2020-04-28 13:13:43 · 145 阅读 · 0 评论 -
JavaScript计算地球上两个经纬度之间的直线距离
上述代码以球状模型计算地球上两点之间的直线距离。计算结果为9700米,跟。原创 2017-12-29 14:44:01 · 1535 阅读 · 0 评论 -
二分查找算法(C语言版)
二分查找的前提:数组本身是有序组织的。算法思想:采用分治策略,每进一步都将问题规模减半,最多经过logN次(对数的底为2)查找能得到结果。算法实现:有循环和递归两种方法,递归需要更多的函数嵌套调用,函数执行时栈帧的开销大,当然选择循环的写法。C语言举例说明:对已排好序的整数数组(arr大小为size,升序排列)进行二分查找,函数声明为:int *binary_search(int...原创 2014-07-05 18:11:06 · 1314 阅读 · 0 评论 -
n个中选k个组合问题,力扣#77题
打印输出从自然数1,2,3, ... , n中任取r个数的所有组合。原创 2014-05-03 14:45:37 · 923 阅读 · 0 评论 -
打印螺旋矩阵(方阵),力扣#54、#59题
闲暇之余研究了螺旋方阵的生成方式,包括顺时针螺旋(clockwise)、逆时针螺旋(anticlockwise),算法从最外层的左上角(top left)开始构造整个Spiral Matrix。class SpiralMatrix{ private int size; SpiralMatrix(){ size = 3; } SpiralMatrix(int size){ this.size = size; } ...}原创 2014-04-13 20:31:32 · 766 阅读 · 0 评论