数据结构
文章平均质量分 63
csj50
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构基础之《(24)—动态规划》
规定机器人必须走K步,最终能来到P位置(P也是1~N中的一个)的方法有多少种?1、某一个暴力递归,有解的重复调用,就可以把这个暴力递归优化成动态规划。(5)规定好严格表的大小,分析位置的依赖顺序,然后从基础填写到最终解。(1)你已经有了一个不违反原则的暴力递归,而且的确存在解的重复调用。2、任何动态规划问题,都一定对应着某一个有解的重复调用的暴力递归。假设有排成一行的N个位置,记为1~N,N一定大于或等于2。开始时机器人在其中的M位置上(M一定是1~N中的一个)(3)参数间的所有的组合数量,意味着表大小。原创 2025-03-27 15:48:25 · 293 阅读 · 0 评论 -
数据结构基础之《(23)—暴力递归》
方法二,hanoi2函数,忘掉左中右,只有from、to、other,考虑1到N层圆盘怎么从from到to。不记录子问题的解就是暴力,记录子问题的解就是动态规划。(1)第一步,1到N-1层圆盘从from移动到other。(3)第三步,1到N-1层圆盘从other移动到to。(3)第三步,1到N-1层圆盘,从中间移动到右边。(1)把问题转化为规模缩小了的同类问题的子问题。(2)第二步,N层圆盘自己从左边移动到右边。(2)第二步,N层圆盘从from移动到to。(1)第一步,1到N-1个圆盘移动到中间。原创 2025-03-24 14:44:52 · 347 阅读 · 0 评论 -
数据结构基础之《(22)—图》
2、虽然存在有向图和无向图的概念,但实际上都可以用有向图来表达。1、由点的集合和边的集合构成。3、边上可能带有权值。原创 2025-03-20 17:38:16 · 219 阅读 · 0 评论 -
数据结构基础之《(21)—并查集》
void union(V x, V y),把x和y各自所在集合的所有样本合并成一个集合(x和y所在的集团,合并在一起)boolean isSameSet(V x, V y),查询样本x和样本y是否属于一个集合(问x和y联通了没有)a在自己的集合里只有a,b在自己的集合里只有b...,每个样本单独是一个集合,它和谁都不联通。找到a,根据指针往上找,往上到不能再往上,这个代表点不一样,说明不在一个集合。1、有若干个样本a、b、c、d...类型假设是V。2、在并查集中一开始认为每个样本都在单独的集合里。原创 2025-03-18 17:32:36 · 310 阅读 · 0 评论 -
数据结构基础之《(20)—贪心策略》
给你每一个项目开始的时间和结束的时间,你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。3、对于能举出反例的策略直接跳过,不能举出反例的策略要证明有效性。2、用一种局部最功利的标准,总是做出在当前看来是最好的选择。这往往是特别困难的,要求数学能力很高且不具有统一的技巧性。1、实现一个不依靠贪心策略的解法X,可以用最暴力的尝试。3、用解法X和对数器,用实验的方式得知哪个贪心策略正确。2、脑补出贪心策略A、贪心策略B、贪心策略C...2、根据业务逻辑找到不同的贪心策略。4、不要去纠结贪心策略的证明。原创 2025-03-07 17:42:38 · 288 阅读 · 0 评论 -
数据结构基础之《(19)—矩阵处理》
左上角有A、B两个点,A往右一步一步走,B往下一步一步走。打印顺序:1,2,7,13,8,3,4,9,14...写一个函数从左下往右上打印,调度问题交给点A和B来移动。核心技巧:找到coding上的宏观调度。一、zigzag打印矩阵。原创 2025-03-05 17:25:38 · 399 阅读 · 0 评论 -
数据结构基础之《(18)—打表技巧》
3、一个大的问题中总是牵扯到一个小问题,它每一次数据返回固定不变的,如果规模比较小,可以先把这张表做好,以后这个问题不用现场调函数去执行返回,只要从表里面拿具体的数据就可以了。24是因为每次8换6都会多出2个,如果换了3次(也就是多凑了一个3*2=6)都无法整除6,说明一开始余下的数不可能被整除,也就是说不可能是0,或6。2、一个大问题解决时底层频繁使用规模不大的小问题的解,如果小问题的返回值满足条件1,可以把小问题的解列成一张表,作为程序的一部分。(2)剩下的苹果超过24个,不需要试了,返回-1。原创 2025-02-27 14:42:49 · 485 阅读 · 0 评论 -
数据结构基础之《(17)—二叉树》
因为递归很强,递归可以让一个东西来到3次,所以可以随便加工先序、中序、后序。(3)第一次到达一个节点就打印就是先序、第二次打印即中序、第三次打印即后序。先序:任何子树的处理顺序都是,先头节点、再左子树、然后右子树(中左右)中序:任何子树的处理顺序都是,先左子树、再头节点、然后右子树(左中右)后序:任何子树的处理顺序都是,先左子树、在右子树、然后头节点(左右中)(2)先序、中序、后序都可以在递归的基础上加工出来。5、非递归方式实现二叉树的先序、中序、后序遍历。4、递归方式实现二叉树的先序、中序、后序遍历。原创 2025-02-11 17:15:52 · 386 阅读 · 0 评论 -
数据结构基础之《(16)—链表题目》
2、对于面试,时间复杂度依然放在第一位,但是一定要找到空间最省的方法。3、输入链表头节点,奇数长度返回中点前一个,偶数长度返回上中点前一个。4、输入链表头节点,奇数长度返回中点前一个,偶数长度返回下中点前一个。1、输入链表头节点,奇数长度返回中点,偶数长度返回上中点。2、输入链表头节点,奇数长度返回中点,偶数长度返回下中点。1、对于笔试,不用太在乎空间复杂度,一切为了时间复杂度。当快指针走完的时候,慢指针应该来到中点的位置。原创 2025-01-22 17:45:09 · 453 阅读 · 0 评论 -
数据结构基础之《(15)—排序算法小结》
潜伏》里说同样两个一百元大钞,你能告诉我哪一个是高尚的那一个是龌龊的么。第一个5和1交换,第一个5会跑到后面几个5的后面,原序列中两个5的相对前后顺序就被破坏了。4、有些排序算法可以实现成稳定的,而有些排序算法无论如何都实现不成稳定的。排完之后,如果排序有稳定性的,在1班的学生内部,年龄是从小到大排序的。1、稳定性是指同样大小的样本再排序之后不会改变相对次序。没有稳定性,因为它是从0到n-1中找最小值,然后交换。5、什么算法是稳定的,什么算法是不稳定的。得到一个序列,年龄是从小到大的。原创 2025-01-22 14:44:57 · 451 阅读 · 0 评论 -
数据结构基础之《(14)—桶排序》
怎么生成有序的数组呢?从左往右看词频表,0岁的人有2个,写2个0,依次类推(它叫计数排序)员工年龄不会超过200岁,建个help数组[201],对年龄在0~200之间做词频统计。2、桶排序是一个大思想,计数排序是桶排序的一种体现。2、桶排序思想下的排序有:计数排序 & 基数排序。4、应用范围有限,需要样本的数据状况满足桶的划分。桶就是一个容器,例子里的桶是一个词频统计的值。3、只有最小值到最大值很窄的情况下,才有价值。1、桶排序思想下的排序都是不基于比较的排序。有一个数组,里面是员工的年龄,如何排序。原创 2025-01-21 14:10:00 · 263 阅读 · 0 评论 -
数据结构基础之《(13)—前缀树》
1、前缀树(Trie),又称字典树或单词查找树,是一种用于存储字符串集合的数据结构。(4)沿途节点的pass值增加1,每个字符串结束时来到的节点end值增加1。(2)字符放在路上,节点上有专属的数据项(常见的是pass和end值)intend:在我加字符的过程中,这个节点,称为了多少字符串的结尾。intpass:在一个一个节点加入的过程中,当前节点通过了几次。(3)所有样本都这样添加,如果没有路就新建,如有路就复用。(1)单个字符串中,字符从前到后的加到一棵多叉树上。原创 2025-01-08 16:05:53 · 383 阅读 · 0 评论 -
数据结构基础之《(12)—比较器》
(3)返回0的情况,就是o1=o2的情况,谁在前面无所谓。(1)返回负数的情况,就是o1排在前面的情况(o1小)(2)返回正数的情况,就是o2排在前面的情况(o2小)3、比较器可以很好的应用在根据特殊标准排序的结构上。2、比较器可以很好的应用在特殊标准的排序上。4、写代码变得异常容易,还用于泛型编程。1、比较器的实质就是重载比较运算符。原创 2024-12-24 17:52:01 · 365 阅读 · 0 评论 -
数据结构基础之《(11)—堆》
假设它是最小的数,将它挪到顶,就必然要对每棵子树的头结点进行判断。大根堆:其特点在于每个节点的值都大于或等于其子节点的值。小根堆:其每个非叶子节点的值都小于或等于其子节点的值。若原堆是大根堆,最后一个数它肯定是整个堆里最小的数。1、堆在结构上是一颗完全二叉树。4、调整后为什么还是大根堆。3、树调整的代价logN。5、自己实现堆结构代码。原创 2024-12-05 15:41:17 · 323 阅读 · 0 评论 -
数据结构基础之《(10)—快速排序》
i留在原地,第三个数是2,小于num,自己和自己交换,小于区右移一个位置,i++(2)i位置的数区左扩,i不动。第一个数3,小于num,自己和自己交换,小于区右移一个位置,i++第二个数5,大于num,5和2交换,大于区左移一个位置,i不动。第四个数0,大于num,0和4交换,小于区右移一个位置,i++第六个数6,大于num,6和7交换,大于区左移一个位置,i不动。原创 2024-12-02 17:32:09 · 458 阅读 · 0 评论 -
数据结构基础之《(9)—归并排序》
1、整体是递归,左边排好序+右边排好序+merge让整体有序。说明:在arr上,从L到R范围上让它变成有序的。3、利用master公式来求解时间复杂度。2、让其整体有序的过程里用了排外序方法。(2)f(M+1, R)之间有序。(1)先f(L, M)之间有序。4、当然可以用非递归实现。1、首先有一个f函数。原创 2024-11-28 16:34:41 · 618 阅读 · 0 评论 -
数据结构基础之《(8)—哈希表和有序表》
5、使用哈希表增(put)、删(remove)、改(put)和查(get)的操作,可以认为时间复杂度为O(1),但是常数时间比较大。4、有无伴随数据,是HashMap和HashSet唯一的区别,底层怎么组织,实际结构是一样的。6、放入哈希表的东西,如果是基础类型,内部按值传递,内存占用是这个东西的大小。7、放入哈希表的东西,如果不是基础类型,内部按引用传递,内存占用是8个字节。3、如果既有key,又有伴随数据value,可以使用HashMap结构。AVL树,SB树,红黑树,跳表。二、哈希表和有序表区别。原创 2024-11-27 16:54:27 · 238 阅读 · 0 评论 -
数据结构基础之《(7)—递归》
6)f(0,0)函数有返回值,返回给系统栈的栈顶,所以会重建f(0,1)这个过程,重建临时变量mid,把f(0,0)的返回值塞到leftMax变量里,从22行往下跑。分解为f(0,0)最大值,f(1,1)最大值,f(2,2)最大值,f(3,3)最大值。1)将[L..R]范围分成左右两半。2)如果log(b,a) > d,复杂度为O(N^log(b,a))2、上面的例子T(N)=2T(N/2)+O(N^0)3)程序销毁f(0,3)函数,跑f(0,1)函数。5)程序销毁f(0,1)函数,跑f(0,0)函数。原创 2024-11-11 17:48:54 · 490 阅读 · 0 评论 -
数据结构基础之《(6)—栈和队列》
维护一个min成员变量行不行,不行,你知道当前最小的,返回后,剩余元素中最小的不知道。2、语言提供的api是有限的,当有新的功能是api不提供的,就需要改写。2、实现一个特殊的栈,在基本功能的基础上,再实现返回栈中最小元素的功能。5)颠倒两个队列,help变成data队列,data变成help队列。3、任何软件工具的底层都是最基本的算法和数据结构,这是绕不过去的。1)用两个队列,一个data队列,一个help队列。1)用两个栈,一个push栈,一个pop栈。维护两个栈,一个data栈,一个min栈。原创 2024-11-11 16:05:56 · 271 阅读 · 0 评论 -
数据结构基础之《(5)—链表》
1、链表相关的问题几乎都是coding问题。1、单向链表节点结构(可以实现成泛型)二、单向链表和双向链表最简单的练习题。(1)单链表和双链表如何反转。2、双向链表节点结构。原创 2024-09-26 15:38:10 · 328 阅读 · 0 评论 -
数据结构基础之《(4)—异或运算》
4、题目四:一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数。2、题目二:一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这种数。整个数组可以分为两大类:第一类是第8位是1的数,第二类是第8位是0的数。不用管abcde是什么顺序,只要同一批数,异或的结果是一样的。假设第8位是1,说明a的第8位和b的第8位不同。将所有数异或到一起,留下的数就是奇数次的数。第8位上是0的数也可能存在出现了偶数次的数。第8位上是1的数可能存在出现了偶数次的数。原创 2024-09-25 14:58:42 · 636 阅读 · 0 评论 -
数据结构基础之《(3)—二分法》
1、二分法查找的时间复杂度是依赖于2的几次方,所以O是log2(N),以2为底可以直接写成logN。(3)i位置的数,既比i-1位置的数小,也比i+1位置的数小,就是局部最小。arr无序数组,任意两个相邻的数都不相等,返回一个局部最小的位置。1、经常见到的类型是在一个有序数组上,开展二分搜索。(2)N位置的数比N-1位置的数小,就是局部最小。2、在一个有序数组中,找>=某个数最左侧的位置。3、在一个有序数组中,找=2最左侧的位置。原创 2024-09-06 17:02:05 · 450 阅读 · 0 评论 -
数据结构基础之《(2)—对数器》
3、你在网上做笔试,但是前几个测试用例都过了,突然一个巨大无比数据量来了,结果你的代码报错了,如此大的数据量根本看不出哪错了。1、你在网上找到了某个公司的面试题,你想了好久,感觉自己会做,但是你找不到在线测试,5、如果有一个随机样本使得比较结果不一致,打印样本进行人工干预,改对方法a和方法b。2、你和朋友交流面试题,你想了好久,感觉自己会做,但是你找不到在线测试。1、你想要测的方法a(你设计的流程时间复杂度低,但是不知道对不对)4、把方法a和方法b跑相同的随机样本,看看得到的结果是否一样。原创 2024-09-05 17:22:48 · 538 阅读 · 0 评论 -
数据结构基础之《(1)—复杂度》
比如:执行一个数组的寻址,执行的时间和数据量没关系,第1000个位置和第1000万个位置,时间是一样的,计算机用偏移量获得。3、这就是时间复杂度的意义,它是衡量算法流程的复杂度的一种指标,该指标只与数据量有关,与过程之外的优化无关。(1)先在0到n-1中,找到最小值位置在哪儿,然后把最小值和0位置的数交换。(3)在1到n-1中,找到最小值的位置在哪儿,然后把最小值和1位置的数交换。反之,执行时间不固定的操作,跟样本量有关的,都不是常数时间的操作。当样本量大到足够大的时候,决定算法快慢的就是高阶项的东西。原创 2024-08-20 17:50:34 · 538 阅读 · 0 评论
分享