文章分类 -  数据结构与算法

摘要:首先讲一下bfprt算法是干嘛的? bfprt算法是用来求数组中第k小的元素的算法,bfprt算法可以在O(n)时间内求出答案。 算法思想:对于求数组中第k小的元素的问题,我们已经有很好的常规算法了,这个算法在最好的情况下时间复杂度是O(n),但在最坏的情况下是O(n^2)的,其实bfprt算法就是 阅读全文
posted @ 2022-11-16 10:14 keep每天进步一点点 阅读(121) 评论(0) 推荐(0)
摘要:引子 Q: 从长度为N的数据中随机等概抽出1条数据。 A: 第j个元素以概率决定保留 问题 从长度为N的数据中随机抽出长度为K的数据,即每个元素被选中的概率都为 做法 初始化:依次取出前K个元素; 此后,第j个元素以概率决定保留 证明 public class ReservoirSamplingTe 阅读全文
posted @ 2022-11-15 14:24 keep每天进步一点点 阅读(60) 评论(0) 推荐(0)
摘要:可以记住概念 卡特兰数 的通项公式为f(n)=1n+1Cn2nf(n)=1n+1C2nn又根据 组合数的计算公式: 可得:f(n)=1n+1(2n)!n!⋅n!=(2n)!(n+1)!⋅n!f(n)=1n+1(2n)!n!⋅n!=(2n)!(n+1)!⋅n!同时满足递推关系式:f(0)=1,f(n+ 阅读全文
posted @ 2022-03-11 15:29 keep每天进步一点点 阅读(226) 评论(0) 推荐(0)
摘要:单链表可能有环,也可能无环。给定两个单链表的头节点head1和head2,这两个链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null即可。 要求:如果链表1的长度为N,链表2的长度为M,时间复杂度请达到O(N+M),额外空间复杂度请达到O(1 阅读全文
posted @ 2021-12-28 17:15 keep每天进步一点点 阅读(75) 评论(0) 推荐(0)
摘要:定义 Heap是一种数据结构具有以下的特点:1)完全二叉树;2)heap中存储的值是偏序; Min-heap: 父节点的值小于或等于子节点的值;Max-heap: 父节点的值大于或等于子节点的值;用通俗语言来说,大根堆就是每个最大的数字在每个子树的最上方,及大根堆pop值为最大值,小根堆反之 堆的存 阅读全文
posted @ 2021-12-28 14:27 keep每天进步一点点 阅读(212) 评论(0) 推荐(0)
摘要:SBT其实是英文Size balanced tree的缩写,翻译过来可以理解成节点*衡树,这是大牛陈启峰在高中参加算法竞赛时期发明的数据结构。不得不说大牛实在是大牛,在高中的时候就已经难以望其项背了。 二叉搜索树 SBT本质上是一棵二叉搜索树,我们之前介绍过二叉搜索树,但是从来没有真正实现过。我们今 阅读全文
posted @ 2021-11-08 17:24 keep每天进步一点点 阅读(491) 评论(1) 推荐(0)
摘要:AVL树(平衡二叉树): AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。下面是平衡二叉树和非平衡二叉树对比的例图: 平衡因子 阅读全文
posted @ 2021-11-08 11:06 keep每天进步一点点 阅读(87) 评论(0) 推荐(0)
摘要:什么是KMP算法: KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者!! KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下 阅读全文
posted @ 2021-10-15 15:47 keep每天进步一点点 阅读(138) 评论(0) 推荐(0)
摘要:思想: 遵循以下原则 1.当前结点cur没有左子树,当前结点cur向右移动 2.当前结点cur有左子树,找到当前结点左子树的最右结点 如果左子树的最右结点的右子树为空,那么将本来指向空的最右结点指向当前结点cur,然后当前结点向左移动 如果当前结点cur左子树的最右结点指向当前结点cur,让最右孩子 阅读全文
posted @ 2021-10-14 14:45 keep每天进步一点点 阅读(96) 评论(0) 推荐(0)