随笔分类 -  算法笔记

摘要:需求一、查询当前群的所有子级群组 递归 遍历N叉树,获取数据 /** * 获取子级群列表信息 * @param roomId * @param inside * @return */ @Override public TreeRoom getSubGroup(ObjectId roomId, int 阅读全文
posted @ 2021-11-18 15:04 别动我的猫 阅读(264) 评论(0) 推荐(0) 编辑
摘要:如题,uuid生成32位字符串,想把这个字符串 变成数字 /** * md5转数值型 * 这个算法返回值理想长度是16,因为md.length = 16 */ public static String ConvertNum(String s) { if(StringUtil.isEmpty(s)){ 阅读全文
posted @ 2021-10-08 16:45 别动我的猫 阅读(3165) 评论(0) 推荐(0) 编辑
摘要:庞大的数据量,前端展示往往会选择分页。但是在分页获取数据的时候,有新的数据插入,就会存在重复的问题。 案发现场,祖传代码MongDB,获取视频是分页获取的。分析下原因,比如每次获取10条数据,按上传时间倒序排列。 那么第一次获取的数据是 10,9,8,7,6,5,4,3,2,1 在这个时间段有人上传 阅读全文
posted @ 2021-06-10 17:22 别动我的猫 阅读(3007) 评论(0) 推荐(0) 编辑
摘要:如题:机试第一轮就碰到它,90分钟不够直接挂了。在此记录以供大家参考 题目:麻将有1-9的数字,每个数字只能出现4次。相同的两个数字为对子,例如22;连续的3个数字为顺子,例如123;相同的三个数字为刻子,例如333 糊牌规则:当玩家手中的牌数量为:2、5、8、11、14张时,且是对子、顺子、刻子的 阅读全文
posted @ 2020-05-20 21:04 别动我的猫 阅读(13187) 评论(0) 推荐(0) 编辑
摘要:辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的 阅读全文
posted @ 2019-07-16 23:46 别动我的猫 阅读(3423) 评论(0) 推荐(0) 编辑
摘要:快速排序是一种常用的排序算法,比选择排序快很多。 在快速排序中使用了大量的递归,快速排序的三个步骤: 1、选择基准值 2、将数组分成两个子数组;小于基准值的元素和大于基准值的元素 3、对这两个子数组进行快速排序(递归) 快速排序的速度取决于选择的基准值,运行速度记做 O(n longn ),大O表示 阅读全文
posted @ 2019-07-16 23:45 别动我的猫 阅读(3890) 评论(0) 推荐(0) 编辑
摘要:假设你的计算机存储了很多音乐,对于每首音乐,你都记录了其播放次数。 那么你需要将这个音乐列表按播放次数从多到少进行排序。假设这个列表的长度是 n 首先遍历这个列表,找出播放次数最多的歌曲,将其放到一个新列表的第一位,操作遍历 次数为 n 然后再次编译剩下的列表,找出播放次数最多的歌曲,把它放到排序列 阅读全文
posted @ 2019-07-16 23:37 别动我的猫 阅读(13617) 评论(0) 推荐(0) 编辑
摘要:递归,顾名思义,自己调用自己的算法。 编写递归函数时,必须告诉它何时停止递归。正因为如此,每个递归函数都有两个部分:基线条件(base case)和递归条件(recurssive case)。递归条件指的是函数调用自己的条件,而基线条件指的是函数不再调用自己,避免无限死循环的条件。 因此使用递归的算 阅读全文
posted @ 2019-07-16 22:42 别动我的猫 阅读(14055) 评论(0) 推荐(0) 编辑
摘要:分析:上述代码就是递归,通俗的讲就是自己调用自己;在执行函数test时,他也调用了另外一个函数,只不过这个函数的代码和上一个函数的代码一模一样!是不是很简单 看一下机器层面的执行过程:此时就需要引入栈帧的概念了:1:栈帧将栈分割成N个记录块,每一个记录块的大小是不一样的;2:这个记录块实际上是编译器 阅读全文
posted @ 2019-07-16 18:04 别动我的猫 阅读(18905) 评论(0) 推荐(0) 编辑
摘要:栈先进后出,队列(堆)先进先出。 栈相当于你往泡菜坛子里装泡菜,从里面拿泡菜,先拿到的当然是上面的。也就是先进后出。队列相当于一个隧道,火车往里面开,不能回头,头先进去当然也先出来,这叫先进先出。 阅读全文
posted @ 2019-07-16 17:06 别动我的猫 阅读(857) 评论(0) 推荐(0) 编辑
摘要:一、数组 是一组固定长度,相同类型元素的序列。 二、链表 链表中的元素可以存储在内存的任何地方。链表的每个元素都存储了下一个元素的地址,只要有内存就能增加新元素。 这是用大O表示法对数组和连接的读取、插入、删除的对比 数组的特点是访问效率高,有两种访问方式:随机访问和顺序访问。众所周知,数组的每个元 阅读全文
posted @ 2019-07-05 00:05 别动我的猫 阅读(388) 评论(0) 推荐(1) 编辑
摘要:有一位旅行商,我们暂且称呼他为彪哥。 他需要前往5个城市,所以想要计算出旅程最短的路线。 对于每种路线组合,他都计算出总旅程,再挑选旅程最短的路线。 那么,算法效率的问题来了。 5个城市有120个不同的排列方式,因此需要执行120次操作。 6个城市有720个不同的排列方式,因此需要执行720次操作。 阅读全文
posted @ 2019-07-03 23:15 别动我的猫 阅读(14102) 评论(0) 推荐(0) 编辑
摘要:一、大O表示法定义 大O表示法是一种特殊的表示法,指出了算法的速度有多快。当然是趋向于操作的次数,因为每种操作的方式不同所需的时间也就无法统一。大O表示法通常作为一个算法优劣的标准,越快越好,数值越小越快。 二、大O表示法语法 O(n) 例: 假设列表有n个元素,简单查找需要查找每个元素,因此需要执 阅读全文
posted @ 2019-07-03 22:59 别动我的猫 阅读(914) 评论(0) 推荐(0) 编辑
摘要:一、什么是算法? 算法是一组完成任务的指令,任何代码片段都可以称为是算法。 本人理解算法区别于程序的概念,是为了更快执行任务的一组指令。是类似与书的目录,数据库的主键的东西,有优化的意思,不然不好意思叫那个名字。 二、二分法 二分查找是一种算法,查找的资源必须是一个有序的元素列表(如果无序,二分法无 阅读全文
posted @ 2019-07-03 14:08 别动我的猫 阅读(918) 评论(0) 推荐(0) 编辑