数据结构与算法
文章平均质量分 67
数据结构与算法
studyday1
多总结,多思考,多批判,多学习
展开
-
【算法&数据结构体系篇class39】卡特兰数
卡特兰数原创 2023-05-19 17:48:13 · 1240 阅读 · 0 评论 -
【算法&数据结构体系篇class38】对数器找规律、根据数据状况猜解法(续)、以及分治
号怪兽的能力,你可以选择直接通过,你的能力并不会下降,你也可以选择贿赂这个怪兽,然后怪兽就会加入你,他的能力直接累加到你的能力上。小虎可以自由使用两种袋子来装苹果,但是小虎有强迫症,他要求自己使用的袋子数量必须最少,且使用的每个袋子必须装满。的钱,贿赂这个怪兽,然后怪兽就会加入你,他的能力直接累加到你的能力上;如果你当前的能力,大于等于。小虎去买苹果,商店只提供两种类型的塑料袋,每种类型都有任意数量。,数据分成多个块(常见是两块)之后,各自的可能性并不算多。有一只牛和一只羊,牛先吃,羊后吃,它俩轮流吃草。原创 2023-05-15 18:07:39 · 423 阅读 · 0 评论 -
【算法&数据结构体系篇class37】有序表 (下篇)实战,未完待续
【代码】【算法&数据结构体系篇class36】有序表 (下篇)实战。原创 2023-05-11 15:47:10 · 113 阅读 · 0 评论 -
【算法&数据结构体系篇class36】有序表 (中篇)SB树、跳表
让每一个叔叔节点为头的数,节点个数都不少于其任何一个侄子节点。树不同的是,每轮经过调整后,谁的孩子发生变化了,谁就再查。分布来使得高层索引可以无视数据规律,做到整体性能优良。)也是从底层被影响节点开始向上做路径每个节点检查。)因为这种只要变就递归的特性,别的树没有。)可以在节点上封装别的数据项,来增加功能。)就把平衡性的调整放在插入的时候。(利用旋转让底层那个上到顶部))结构上根本和搜索二叉树无关。)思想是所有有序表中最先进的。)删除时候可以不用检查。结构简单就是多级单链表。原创 2023-05-10 15:28:45 · 702 阅读 · 0 评论 -
【算法&数据结构体系篇class35】有序表 (上篇)AVL树
LR 就是cur的左节点的右节点 路线是较高的子树 将其左节点的右节点弹到cur 也就是对左节点进行左旋,左节点的右节点位置就来到左节点,然后再对cur进行右旋,就会使得前面来到左节点的左右子节点来到cur 完成平衡。后继节点 也就是节点的右子树的最左节点 就是该节点的下个节点 称后继节点 因为搜索二叉树中序遍历就是有序的升序排列 下个节点自然就是找右子树的最左节点。)如果该节点有左孩子、有右孩子,用该节点后继节点顶替该节点。)如果该节点有左孩子、没有右孩子,直接用左孩子顶替该节点。原创 2023-05-07 11:16:49 · 231 阅读 · 0 评论 -
【算法&数据结构体系篇class34】资源限制技巧汇总
八、题目七在一个大文件中,取出出现次数最多的前100个数思路: 哈希函数可以把数据按照种类均匀分流1.大文件按照限制条件,进行哈希,哈希分别带入多个小文件,均分在每个小文件,对每个小文件中求 数出现次数最多的前100个数,因为哈希分布,相同数的多个 只会落到同一个小文件中2.对每个小文件的前100个数,进行外排序,依次取出每次比较多个文件的最大值, 直到取出前100个。原创 2023-05-05 20:19:36 · 409 阅读 · 1 评论 -
【算法&数据结构体系篇class33】哈希函数、布隆过滤器、一致性哈希
4.即百亿数据,假设存放在哈希表的话 哈希表一条数据就是一个键值对 键值对假设都是整形,键值都是整形4+4=8字节长度,一百亿条数据*8字节, 转换G 是换算10的9次方 就是 80G 空间,经过布隆过滤器,空间节省大约需要23G即可,存在万分之一概率失误,在实际工程项目上,失误率很低,且换来的空间的大大节省,是常用的一个压缩空间的优化。6. p实际的概率 带入第三个公式,可以得到实际的概率值 ,k值我们向上取整13, m就是位数23G这样带入得到的p比预想的万分之一概率会更低。举个例子:哈希表的设计。原创 2023-05-04 19:56:46 · 440 阅读 · 0 评论 -
【算法&数据结构体系篇class32】:IndexTree & AC自动机
没有线段树那么强,但是非常容易改成一维、二维、三维的结构。指针的含义:如果必须以当前字符结尾,当前形成的路径是。解决在一个大字符串中,找到多个候选字符串的问题。指针就指向那个字符串的最后一个字符所对应的节点。IndexTree 一维数组代码演示。)把所有匹配串生成一棵前缀树。的后缀,拥有最大的匹配长度。,剩下哪一个字符串的前缀和。原创 2023-04-25 13:14:08 · 383 阅读 · 0 评论 -
【算法&数据结构体系篇class31】:线段树
1,一种支持范围整体修改和范围整体查询的数据结构2,解决的问题范畴:大范围信息可以只由左、右两侧信息加工出,而不必遍历左右两个子范围的具体状况。原创 2023-04-23 09:35:38 · 201 阅读 · 0 评论 -
【算法&数据结构体系篇class30】:Morris遍历
1)如果cur没有左孩子,cur向右移动(cur = cur.right)一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1)b.如果mostRight的右指针指向cur,让其指向null,a.如果mostRight的右指针指向空,让其指向cur,然后cur向右移动(cur = cur.right)然后cur向左移动(cur = cur.left)通过利用原树中大量空闲指针的方式,达到节省空间的目的。假设来到当前节点cur,开始时cur来到头节点位置。为头的树中,最小深度是多少?原创 2023-04-20 17:19:09 · 325 阅读 · 0 评论 -
【算法&数据结构体系篇class29】:bfprt算法、蓄水池算法
在前面写过一篇排序算法,其中我们优化核心点就是把划分值定成随机等概率的l..r上的某个位置,减少了较坏情况的概率,那么 bfprt算法,就是通过一个固定的逻辑算法过程,定义一个比较良好的划分值位置。不再是随机得到的一个位置。原创 2023-04-19 12:01:14 · 184 阅读 · 0 评论 -
【算法&数据结构体系篇class28】:Manacher算法
比如 abcd123321 需要在1 后面加 bcda 构成 abcd123321dcba。已知一个字符串 , 在其后面至少加多个字符 能使得整个字符串是一个回文串。已知一个字符串 , 在其后面至少加多个字符 能使得整个字符串是一个回文串。Manacher算法解决 时间复杂度O(N))每一种情况划分,都可以加速求解。)理解回文半径数组 pArr。)理解所有中心的回文最右边界。,想返回最长回文子串的长度。回文长度进行的状况划分。二、返回最长回文子串。原创 2023-04-17 15:11:20 · 74 阅读 · 0 评论 -
【算法&数据结构体系篇class26】:斐波那契数列 矩阵快速幂技巧 时间复杂度O(logN)
|fn,fn-1,fn-2..fn-i+1| (共i项) = |fi,fi-1,fi-2...1| (共i项) * 矩阵i*i 的 n-i次方。4)斐波那契数列 1 1 2 3 5 8 13.....其为fn = fn-1 + fn-2 最底层n-2 是二阶矩阵 n-2次方。4.生牛问题 1,2,3,4,6,9,13,19...2.迈台阶问题 1,2,3,5,8,13,21....1.斐波那契数列 1,1,2,3,5,8,13....求斐波那契数列矩阵乘法的方法。原创 2023-04-13 10:14:30 · 639 阅读 · 0 评论 -
【算法&数据结构体系篇class25 26】:单调栈技巧
中所有位置的两个信息,怎么能让得到信息的过程尽量快。那么所有子数组中,这个值最大是多少?组成的最大子矩形,内部有多少个。给定一个可能含有重复值的数组。位置的数一定存在如下两个信息。返回所有子数组最小值的累加和。返回直方图的最大长方形面积。给定一个只包含正数的数组。那么到底怎么设计呢?原创 2023-04-12 09:39:33 · 166 阅读 · 0 评论 -
【算法&数据结构体系篇class24】:滑动窗口技巧
在数组或者字符串或者一个序列上,记为S,窗口就是S[L..R]这一部分。L往右滑意味着一个样本出了窗口,R往右滑意味着一个样本进了窗口。因为是求最少货币数,所以每一张货币认为是相同或者不同就不重要了。arr是货币数组,其中的值都是正数。如何能够更快的得到窗口当前状况下的最大值和最小值?窗口不管L还是R滑动之后,都会让窗口呈现新状况,最好平均下来复杂度能做到O(1)滑动内最大值和最小值的更新结构。滑动窗口有左边界L和有边界R。返回每一次滑出状况的最大值。返回组成aim的最少货币数。每个值都认为是一张货币,原创 2023-04-09 16:47:09 · 453 阅读 · 0 评论 -
【算法&数据结构体系篇class16】:图 拓扑排序
/节点类结构//节点值//入度 即指向该节点的前节点个数//出度 即从该节点指向的后节点个数//该节点指向的后节点集合//从该节点指向后节点的边value = v;in = 0;out = 0;//两节点相连的边结构类//边权重//该边的起始节点 from -> to//该边的终止节点weight = w;from = f;to = t;//图结构类,包含了图中的节点,节点之间的边。原创 2023-03-10 10:18:06 · 455 阅读 · 0 评论 -
【算法&数据结构体系篇class14、15】:并查集
把x和y各自所在集合的所有点合并成一个集合,只需要小集合的代表点挂在大集合的代表点的下方即可。(Vx, V y) : 把x和y各自所在集合的所有样本合并成一个集合。3)如果方法调用很频繁,那么单次调用的代价为O(1),两个方法都如此。查询x和y是否属于同一个集合,就是看看找到的代表节点是不是一个。(V x, V y) : 查询样本x和样本y是否属于一个集合。2)节点a往上找到的头节点,叫做a所在集合的代表节点。1)节点往上找代表点的过程,把沿途的链变成扁平的。2)小集合挂在大集合的下面。原创 2023-03-08 10:25:13 · 345 阅读 · 0 评论 -
【算法&数据结构体系篇class13、14】:贪心算法思想
贪心算法思想原创 2023-03-06 10:24:59 · 473 阅读 · 0 评论 -
【算法&数据结构体系篇class12、13】:二叉树
树的头节点是公司唯一的老板。* //判断层序遍历过程如果遇到第一个节点是没有左或右子树的,也就是只有一个子节点或者没有,那么再往后层序遍历的节点都将是叶子节点,否则就不是完全二叉树。* 分大情况两种:1.该节点的整棵树不是搜索树,即该节点不做头节点 2.该节点的整棵树是搜索树。* 取左树最远节点到头节点高度,即左树高度 + 右树最远节点到头节点高度,即右树高度 再加头节点 +1。* 给定一棵二叉树的头节点head,任何两个节点之间都存在距离,表示经过多少个节点 也就是树高。原创 2023-03-03 20:16:18 · 413 阅读 · 0 评论 -
【算法&数据结构体系篇class10、11】:二叉树
1.先序遍历是根左右,祖先节点都是在排在前面的后续遍历是左右根,祖先节点都是排在后面的 所以是两次遍历的交集节点。* 比如 0节点 123孩子节点 1节点 45孩子节点,2节点 678孩子节点,3节点 9孩子节点。至此,证明先序遍历顺序在X之前的节点 ∩ 后序遍历顺序在X之后的节点 两者交集的节点 就是X祖先节点。4.X作为右树,它的左兄弟节点不会出现该交集中,后序遍历左右根,左兄弟节点都是再前面,所以不会在该交集。先序遍历顺序在X之前的节点 ∩ 后序遍历顺序在X之后的节点。原创 2023-03-02 11:51:03 · 370 阅读 · 0 评论 -
【算法&数据结构体系篇class09】:链表问题:快慢指针、回文结构、复制、中点,分区、相交
1->2->3->4 => 1-> copy1 -> 2 -> copy2 -> 3 -> copy3 -> 4 -> copy4,然后调整random指针,最后就将新老节点next指向分离出来 恢复原链表 返回复制链表头节点。如果不相交,返回null。* 2.两个链表一个有环,一个没环,那么肯定是没有相交的节点的 没有这种符合链表结构,因为一定会出现有节点存在两个next指针。* 第一种如两链表长度不同,那么就较长的链表减去两链表长度差值,后开始与较短的链表同时遍历,一旦相等,就是相交第一个节点。原创 2023-02-24 14:58:20 · 459 阅读 · 0 评论 -
【算法&数据结构体系篇class08】:前缀树
时间复杂度 额外空间复杂度 稳定性选择排序 O(N^2) O(1) 无冒泡排序 O(N^2) O(1) 有插入排序 O(N^2) O(1) 有归并排序 O(N*logN) O(N) 有随机快排 O(N*logN) O(logN) 无。原创 2023-02-23 10:28:15 · 499 阅读 · 0 评论 -
【算法&数据结构体系篇class07】:加强堆
或者说,无法在时间复杂度O(logN)内完成!一定会高于O(logN)系统提供的堆无法做到时间复杂度O(logN)3)核心在于各种结构相互配合,非常容易出错。做不到自由删除任何一个堆中的元素,建立反向索引表indexMap。都是O(N)的调整!1)已经入堆的元素,如果。系统提供的堆只能弹出堆顶。参与排序的指标方法变化。原创 2023-02-22 12:13:49 · 465 阅读 · 0 评论 -
【算法&数据结构体系篇class06】:堆、大根堆、小根堆、优先队列
小根堆排序、优先队列:题目中提到了一个,每个元素移动的距离一定不超过k,那么就说明,从第一个数开始,前k+1个数里面,存在一个数,是一定要排在0位置的,这样才能使得移动不超过k个, 比如一个数组最小是1,长度为8,k=5,最小1是需要排在索引0位置的,为了满足移动不超过5个位置,那么在arr[0-k]区间内必然有1,最远只能在rr[k],那么也是移动k为来到0 k-k=0 ,利用这个特性,堆的最大值和堆末尾的值交换,然后减少堆的大小之后,再去调整堆,一直周而复始,时间复杂度为O(N*logN)原创 2023-02-18 16:24:39 · 2115 阅读 · 0 评论 -
【算法&数据结构体系篇class05】partition、荷兰国旗、快速排序
核心点:递归实际上是系统帮我们记录了每一次递归的边界范围信息,是系统栈保存了这些信息,那么要用非递归的形式,那么就需要我们自己定义一个栈,或者队列也可以,保存每一次的边界范围信息,才能遍历进行下一次的数组快排。1)用arr[R]对该范围做partition,原创 2023-02-16 23:23:28 · 601 阅读 · 0 评论 -
【算法&数据结构体系篇class04】:归并排序相关问题
归并排序解决许多问题原创 2023-02-15 20:35:29 · 278 阅读 · 0 评论 -
【算法&数据结构番外篇】:不使用大于小于运算符实现函数:返回两个数较大的一个值
【代码】【算法&数据结构番外篇】:不使用大于小于运算符实现函数:返回两个数较大的一个值。原创 2023-02-15 16:10:21 · 76 阅读 · 0 评论 -
【算法&数据结构体系篇class02】:异或运算技巧
【代码】【算法&数据结构体系篇class02】:异或运算。原创 2023-02-15 12:19:47 · 147 阅读 · 0 评论 -
【算法&数据结构体系篇class01】:选择、冒泡、插入排序、二分查找法
【代码】【算法&数据结构体系篇class01】:选择、冒泡、插入排序、二分查找法。原创 2023-02-15 12:18:54 · 102 阅读 · 0 评论 -
【算法&数据结构体系篇class06】:比较器
对象的比较,一般就取属性来做比较,如代码示例按类的id属性和age属性,两个比较器做一个降序排序,当然也可以复合多个属性或者更复杂的逻辑进行返回排序核心就是返回值,compare()方法这里有个简洁写法,不用做if判断如果要得到升序,直接:return o1.id - o2.id如果要得到降序,直接:return o2.id - o1.id这里简单解释下为什么?升序解释:compare()方法,如果返回负数,认为第一个参数应该排在前面;如果返回正数,认为第二个参数应该排在前面;原创 2023-02-06 16:48:00 · 751 阅读 · 0 评论 -
【算法&数据结构初阶篇】:二叉树
head递归去构造head.left head.right左右子树。中序遍历中的子树inorder,遍历找到根节点对应的索引find。确定左子树的右边界: L1 + find - L2。前序遍历:根左右;创建出根节点head,最后用来返回。L1+1,L1 溢出,则需要返回空。L1 > R1边界溢出。原创 2023-02-07 10:58:28 · 277 阅读 · 0 评论 -
【算法&数据结构初阶篇】:对数器,随机生成大量测试用例神器
对数器就是一个工具,可以帮我们生成对应的大量测试用例,当然测试用例的定义就是我们业务自己来定,比如你写了一个排序算法,想验证数组的排序是否正确,除了在线OJ可以测试,有时本地方便也可以自己手写一个对数器来验证正确性,即生成大量的随机数组。核心点:需要调用Math函数的随机方法random()原创 2023-02-11 17:39:19 · 209 阅读 · 0 评论 -
【算法&数据结构初阶篇】:TreeMap有序表常用方法
TreeMap是一个有序的哈希表,可以通过对于的方法得到首尾的key值,treemap.firstKey(),tree.lastKey(), 还可以查询 大于等于某个key,离该key最近的key等。原创 2023-01-14 17:57:44 · 261 阅读 · 0 评论 -
【算法&数据结构初阶篇】:链表问题
链表java 核心基础原创 2023-01-16 12:06:33 · 587 阅读 · 0 评论 -
【算法&数据结构初阶篇】:位运算
算法中很多情况下需要用到各种位运算的转换,比如>>右移、原创 2023-01-12 20:41:29 · 2997 阅读 · 0 评论 -
【算法&数据结构初阶篇】:随机函数
随机函数结合位运算各种技巧常用,生成对数器进行程序校验原创 2023-01-14 12:09:36 · 1852 阅读 · 0 评论 -
【算法&数据结构初阶篇】:二分查找解决局部最小值问题
先解释下局部最小值问题,这么理解,比如有一个数组,即可。那么现在可以先记住这个现象,如果数组前两个元素是下行状态,意思即arr[0]>arr[1],而倒数两个元素是上行状态,arr[arr.length - 1] > arr[arr.length - 2] ,那么肯定在0 - arr.length-1中,即整个数组存在一个局部最小,道理很简单,一开始数组往下走,最后是往上走,那其中肯定会存在至少一个局部最小,可以想象连绵不绝的山脉,上下跌宕的感觉,或者是股票,你懂的了。因为。原创 2023-01-14 17:04:52 · 1124 阅读 · 1 评论 -
【算法&数据结构体系篇class03】:数组、链表、栈、队列、递归时间复杂度、哈希表、有序表问题
数组、链表、栈、队列、递归时间复杂度、哈希表、有序表问题原创 2023-02-14 22:56:51 · 596 阅读 · 0 评论 -
【算法&数据结构初阶篇】:排序算法
业务中我们经常会用到排序,以下作为排序入门,手写练练coding能力,选择、冒泡、插入三种排序算法。原创 2023-01-13 17:55:52 · 130 阅读 · 0 评论 -
【算法&数据结构初阶篇】:位图bitMap
定义数组长度,需要先给需要存储的数集的最大值表示需要多少个,如 max是63 那个得 1 只需一个元素,如果是64 得 2,就需要2个元素 因为一个Long64位 存放0-63的数值, 接着是64-127num>>6 表示先将目标数值除以64 得到该数值是位于bits数组的第几个,比如63 / 64 = 0 在bit[0] 64/64=1 bit[1]num & 63 表示num % 64 , 即看在该元素的第几位。原创 2023-01-17 12:07:40 · 1120 阅读 · 0 评论