牛客选择题(二)

牛客700题整理(二)

1、两层for循环次数不一样的时候(差很多的时候,比如1000次和1000000次),速度不一样快,并不是简单的时间复杂度问题
 进行数组访问时,操作系统需要将相关内存页面载入cache中,一个页面的大小是有限的,如果程序需要访问页面外的内存数据,操作系统需要进行换页操作,这个操作是耗时的。t1访问的内存区域大小为1000,系统不需要或极少需要换页。t2需要访问的内存区域大小为1000000,系统需要多次换页,比较耗时。简单的讲,t1具有较好的程序局部性
 2、算法的特性(必须要有的基本特征):输入输出、有穷性、确定性、可执行性    
设计算法需要(好的算法有的特征):正确性、底耦合高效率低存储、可读性、健壮性
输入输出中并不是说必须要有1个,0个输入也可以的(比如递归?)所谓0个输入是指算法本身定出了初始条件
不过,一个算法要有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的
3、转义字符,分为三种:一般转义字符,八进制转移字符和十六进制转移字符
一般转义字符,如‘\b’,由两个字符表示,其实代表一个字符,这个代表退格字符
八进制转义字符,如‘\007’,三位数字是八进制的,ASCII码为7的表示响铃
十六进制,如'\xfe',同样后面数字是所表示意思的Ascii码的十六进制表示,注意一定要有x,大小写都行
字符常量,字符常量是用单引号括起来的一个字符,双引号就是字符串(C语言中)
4、多型数据类型是指包含的数据元素的类型并不确定。比如栈可以是整数栈、字符栈、对象栈等等。
但是字符串,它的元素必然是字符。
5、m个元素k路归并的归并趟数s=logk(m),也就是以k为底的m的对数
6、设有 1000 个基本有序的元素,希望用最快的速度挑选出其中前 10 个最大的元素,最后选用( )排序法。


这里需要注意的是:如果1000个数据基本有序的话,可以考虑不用与初始无关的排序方法,而取topN的话可以用局部排序方法,不用全局排序,冒泡排序的话,每次都能把最大的元素放在最后,所以时间复杂度为10N,而快速排序显然不合适,归并排序,不好进行取TopN的操作
7、数据结构的抽象操作的定义与具体实现无关
抽象数据类型独立于具体实现(也就是数据结构与具体实现无关),只是将数据和操作封装在一起,使得用户程序只能通过抽象数据类型定义的某些操作来访问其中的数据,从而实现了信息隐藏(封装?只能用get,set类似的函数??)
https://www.nowcoder.com/profile/5056224/note/detail/252984
8、对n个节点,e条边采用邻接表存储的有向图进行广度优先遍历,算法时间复杂度为O(n+e)
广度优先遍历需要借助队列实现。邻接表的结构包括:顶点表;边表(有向图为出边表)。当采用邻接表存储方式时,在对图进行广度优先遍历时每个顶点均需入队一次(顶点表遍历),故时间复杂度为 O(n)
在搜索所有顶点的邻接点的过程中,每条边至少访问一次(出边表遍历),故时间复杂度为 O(e) 
算法总的时间复杂度为 O(n+e) 


初始数据集的排列顺序对算法的性能无影响的是 基选归堆

猜你喜欢

转载自blog.csdn.net/figthingforadream/article/details/80557929