算法
馥钰
好人一生平安!道阻且长,行则将至!
选择一条自己喜欢的路,向前走,莫回头!
天道酬勤!
学海无涯,温故而知新!
线下不努力,线上出问题!线上出问题,努力全白费!
分布式系统、高并发、大流量,分布式计算、分布式存储!
展开
-
求第K大算法总结
搜索了一下共发现两种解法,一种是借助一个额外的堆空间,一种是利用快排的方式根据位置来查找!解法一:借助辅助堆建立一个k个元素的小顶堆,首先将数组中前k个元素放入堆中,此时堆顶元素为第k大的元素,后面继续遍历数组,比较数组中元素与堆顶元素值,当数组中元素大于堆顶元素时,将堆顶元素弹出,新元素入堆,这样最终堆顶元素即为第k大。可以直接利用Java中优先级队列,这里传入一个比较器来构造小顶堆import org.junit.Test;import java.util.Comparator;原创 2022-02-28 15:02:56 · 256 阅读 · 0 评论 -
红黑树深入解读
红黑树本质是一颗二叉搜索树,且是相对平衡的!树的用途,很重要的就是搜索,要想搜索,必须要先构建红黑树,所以就有插入节点和删除节点的操作!查找节点、插入节点,删除节点就是红黑树非常重要的操作!插入节点、删除节点仍然需要保证是一颗红黑树(符合红黑树的特性),这也是比较复杂的地方!本篇文章根据以下视频整理而来https://www.bilibili.com/video/BV1AK4y1S7yz?from=search&seid=15898297088276053264文章大纲.原创 2021-08-25 20:10:37 · 85 阅读 · 0 评论 -
算法六 暴力破解递归到动态规划
本篇文章根据左程云视频教程整理而来https://www.bilibili.com/video/BV11v411G7xR?p=7人要过河,河里有鳄鱼,鳄鱼会吃人,如果鳄鱼吃了人,鳄鱼就会变弱,其他的鳄鱼就会来吃这个变弱的鳄鱼!问河里有多少条鳄鱼人可以平安过河偶数条鳄鱼可以安全过河,奇数条鳄鱼会被吃掉河里一条鱼,人会被吃掉河里两条鱼,如果其中一条鱼吃掉人的话,另一条鱼就 会吃掉吃人的这条鱼,所以两条鱼谁也不敢去吃这条鱼!……100个硬币,A、B、C、D、E五个人来分,按照A、B原创 2021-07-27 20:05:29 · 222 阅读 · 0 评论 -
算法五 递归方式实现暴力破解
本篇文章根据左程云视频教程整理而来https://www.bilibili.com/video/BV11v411G7xR?p=6问题:子串子序列1、打印一个字符串的所有子串递归:index 位置要或者不要的递归2、打印一个字符串的所有子串,要求不要出现重复值的子序列无重复的子序列,HashSet天然去重用的3、打印一个字符串的全排列 4、打印一个字符串的全排列,要求不要出现重复的排列关键改动:某个位置出现了相同的字符,就返回,不再展开后续...原创 2021-07-26 16:07:28 · 190 阅读 · 0 评论 -
算法四 图的表示、拓扑图、最小生成树
本篇文章根据左程云视频教程整理而来https://www.bilibili.com/video/BV11v411G7xR?p=5一、图的表示方式1、 邻接边法2、邻接矩阵邻接value=边的权重,否则value=∞3 、图结构的算法,把题目给的结构,写一个转换器,转化为自己喜欢的图结构,然后再求解4、推荐的表示图的数据结构1)结点2)边3)图5、把邻接矩阵转化为图的推荐的数据结构三、表遍历1、广度优先遍历2、深度优先遍历...原创 2021-07-23 18:57:52 · 606 阅读 · 0 评论 -
算法三 morris算法
本篇文章根据左程云视频教程整理而来https://www.bilibili.com/video/BV11v411G7xR?p=4一、奇数在奇数位置上,偶数在偶数位置上一个数字数组,把奇数都放在奇数的位置,或者把偶数都放在偶数的位置的算法题!两个指针变量a、b,a、b步长都为2,即a永远指向偶数位置,b永远指向奇数位置,每次判断n-1位置的数,若为偶数与a位置的数交换位置,a移动到下一个偶数位置a=a+2,否则与b交换位置,b移动到下一个奇数位置b=b+2array[n-1] = 1,原创 2021-07-21 18:06:54 · 382 阅读 · 3 评论 -
算法二 旋转词 子树 bfprt算法
一、旋转词B词是否是A词的旋转词,把AA拼接起来,判断B是否是AA的子串二、判断子树先序遍历,叶子结点的孩子都补空,把树的结构,转化为字符串,然后把求子树的问题转化为求是否是子串的问题!子树实例解释源码算法有点复杂可以不用死扣细节,忽略这些觉得难理解可以忽略上面的算法有点复杂,根节点也以_开头,就可以直接判断是否是子串三 、bfprt算法无序数组中求第k小的数,O(n)时间复杂度。两种实现,借用快排思路,随机选择一...原创 2021-07-12 20:43:39 · 204 阅读 · 3 评论 -
算法一 超级水王问题
水王数:数组中超过一半的数字超级水王问题:同时删除两个数(候选 + 血量),血量大于零再遍历一遍数组思想:想法精妙,实现更精妙https://www.bilibili.com/video/BV11v411G7xR?p=21、传统方式:O(N)复杂度+O(N)的空间复杂度。遍历数组统计每个数出现的次数Map<数,出现次数>,遍历一遍map,取出现次数大于数组长度一半的数2、超级水王算法O(N)每次删除两个数,剩下的没被删除的数才有机会是水王数,需要变量一遍数组,验证留..原创 2021-07-12 19:58:28 · 209 阅读 · 1 评论 -
看了Redis源码还不懂这个数据结构,白看了,附自己的实现代码
https://baijiahao.baidu.com/s?id=1633338040568845450&wfr=spider&for=pc因为这个周末加班,一直没有更新,实属抱歉,今天,我们来聊一聊一个数据结构,跳表。跳表是redis的一个核心组件,也同时被广泛地运用到了各种缓存地实现当中,它的主要优点,就是可以跟红黑树、AVL等平衡树一样,做到比较稳定地插入、查询与删除。理论插入查询删除的算法时间复杂度为O(logN)。什么是跳表链表,相信大家都不陌生,维护一个有序.转载 2020-09-10 16:44:33 · 216 阅读 · 0 评论