我先把做过的题放进来,后期再进来补充知识点。怕过几天把题都忘了。
通过这些例题可以大概知道我们需要掌握哪些知识点,哪些技术基础知识,然后再去拓展。在实际应用中也可以更深入的理解原理。不要害怕,我现在这些基础知识都不会,去笔试的时候做的题。但并不影响到我开发项目,只是在开发的过程中效率会比别人低,因为搞不懂深层次的原理,只是单纯的凭感觉,凭逻辑去复制粘贴,当然,也能做出一些项目,只是比较吃力而已。一些涉及到算法以及比较深的理论的项目可能就不好做了。因为底层的很多原理与语法概念都不懂。通过这些题我们可以知道一些其中的原理和基础知识,也让我们能够知道为什么我们写的代码比别人的运行的慢,怎样去优化我们的代码,通过什么方式去测试我们代码的速度和效率,有没有更好的实现方法。这里面的一些题就在渗透这些知识和概念,比如时间复杂度。这句话本身我不知道什么意思,相关的题也就没法做了。通过搜索查询,了解到它其实就是我们写的程序需要运行的时间,运行的速率嘛,怎样提高嘛,我们写的是不是复杂嘛。等等。平时我记忆力不好,总是记不住概念。但看一下解释就知道这个概念的意思了,那后面的题才能仍忍而解。所以还是需要这些基础概念知识的,不一定非要死记硬背,理解了,自然就记住了。
1.以下序列中不符合堆定义的是(D)。
A.(102,87,100,79,82,62,84,42,22,12,68)
B.(102,100,87,84,82,79,68,62,42,22,12)
C.(12,22,42,62,68,79,82,84,87,100,102)
D.(102,87,42,79,82,62,68,100,84,12,22)
[解析] 根据堆的定义,n个关键字序列k1,k2,…,Kn。称为堆的条件是,当且仅当该序列满足 ki≤k2i且ki≤k2i+1或ki≥k2i且ki≥k2i+1,(1≤i≤[n/2])。当i=1,2时,4个选项都满足条件 (其中A,B,D为大根堆,C为小根堆)。但当i=3时,D不满足条件。
通俗理解:首先要了解二叉树,会画二叉树,每一个球往下延伸两个球,从左到右的顺序看。第二个要理解堆的定义,看这个公式很难看懂,其实就是一个球的值是和它延伸出来的两个球的值相比较是最大的或者最小的,并且整个二叉树都是这样的规律才行。不能前面的球规律是其中最大的,后面变成其中最小的了这可不行。看这个例题。
A选项: 102 这里102>87 102>100
87 100 这里87>79 87>82 100>62 100>84
79 82 62 84 这里79>42 79>22 82>12 82>68
42 22 12 68
所以A项符合规定,均是最大值
D选项: 102 这里102>87 102>42
87 42 这里87>79 87>82 42<62 42>68
79 82 62 68 这里79<100 79<84 82>12 82>22
100 84 12 22
所以D选项即出现最大堆也出现了最小堆就错了
2.当一棵二叉树的前序序列和中序序列分别是HGEDBFCA和EGBDHFAC时,其后序序列必是(B)
A.BDEAGFHC
B.EBDGACFH
C.HGFEDCBA
D.HFGDEABC
正确答案选B
由前序序列可知根节点为H
然后由中序序列可知根节点的左子树有EGBD,右子树有FAC
再根据前序序列看,左子树为GEDB,那么左子树的根节点为G
继续看中序序列,以G为根节点的左子树就为E,右子树为BD
以此类推,画出树如下:
后序遍历为EBDGACFH
后续遍历=左子树,右子树,根,中序遍历=左子树,根,右子树 前续遍历=根,左子树,右子树
https://jingyan.baidu.com/article/0f5fb0992cf9ed6d8334ea39.html
看不懂的看上述链接即可。写的很好,我是看懂了
3.时间复杂度与空间复杂度相关很多题,具体忘了,链接链表等。
https://blog.csdn.net/qq_41523096/article/details/82142747
这是时间复杂度的相关讲解,感觉还浅显易懂一点