牛客专项练习之(数组查找选择)

1

正确答案:A     分块查找的查找长度和表的长度,块的长度均有关。分块查找时,首先在索引表中进行查找,确定要找的节点所在的块。由于索引表是排序的,因此,对索引表的查找可以采用顺序查找或折半查找;然后,在相应的块中采用顺序查找,即可找到对应的节点。

 

A. 1                                    B.2                                           C.3                                      D.4

2.正确答案:B     

在有序表中取中间记录作为比较对象,若给定制与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区域进行查找;若给定值大于中间记录的关键字,则在中间记录的右半区域进行查找;

题中关键序列有11个数,故中间记录为第6个数,即50,因50<90,故在50的右半区域进行查找,同理可得,右半区域的中间记录为90,故需查找两次

 3.

3.正确答案:D

链表:方便删除和插入,只需要知道节点和要插入的内容。大小可变,一般链表是动态分配内存空间。链表的节点信息至.少包含数据域和指针域。

链表方便插入删除,数组方便查找。

存储相同数据时,链表占用空间更大(因为链表的一个节点包含数据和指针域)。

 4.

4.正确答案:D    为了节省空间,可以对矩阵进行压缩处理。

 5.

5.正确答案:B   可以带入值去运算

 6

6.正确答案   A       在顺序表中查找,最好情况下第一个元素就是要查找的元素,则比较次数为 1 ;在最坏情况下,最后一个元素才是要找的元素,则比较次数为 n 。两种情况平均即( 1+n ) /2

 7.

7.正确答案   A        数组的长度是固定不变的,数组是线性表的一种。而线性表有多种形式,其长度可变。

  8.

8.正确答案   B     C语言中,字符串默认每个占用1字节,末尾还有'\0',所以一共是4字节

 9.

A. 正确                          B.错位

9.正确答案   A     最外层的 { ... } 会初始化 a[] 即第一维。而 {1} 会初始化 a[0][] 由于只有一个元素,后续元素会默认置 0 。其他同理。只有一个数字说明元素只赋了A[0][0],A[1][0],A[2][0],其余元素都没赋值

 10

10.正确答案   D    要注意时行为主序和列为主序所以a[3,5]以行存储的地址为:(3-1)*10+5=25(i-1)*10+j

 

 

 

第一空是把a中的一个元素赋给max和min  此时i=0  即填a[i]

第二空是判断max和a[j]的大小关系

第三空是判断min和a[j]的大小关系

12

正确答案:B   
 

A.原生类指未被实例化的类,数组一般指实例化,被分配空间的类,不属于原生类.

B.对象的特点是封装了一些数据,同时提供了一些属性和方法,从这个角度来讲,数组是对象

C.格式有误

D.数组的大小确定之后不可改变

 13

正确答案:B     

 14

正确答案:B    线性表可以是有序的,也可以是无序的.集合与线性表的区别是是否允许元素重复 集合不允许元素重复,线性表允许元素重复

 15

A 4                     B3                          C.2                              D.5

正确答案:A          97         33             7       13

 16

正确答案:B 最好情况:每趟匹配不成功都是在第一个字符,即每趟都只需匹配一次就知道该趟是否匹配。O(m+n)

最坏情况:每趟匹配不成功都是在最后一个字符。时间复杂度O(m*n)

kmp算法的核心即是计算字符串f每一个位置之前的字 符串的前缀和后缀公共部分的最大长度(不包括字符串本身,否则最大长度始终是字符串本身)。获得f每一个位置的最大公共长度之后,就可以利用该最大公共长 度快速和字符串O比较。当每次比较到两个字符串的字符不同时,我们就可以根据最大公共长度将字符串f向前移动(已匹配长度-最大公共长度)位,接着继续比 较下一个位置。事实上,字符串f的前移只是概念上的前移,只要我们在比较的时候从最大公共长度之后比较f和O即可达到字符串f前移的目的

17

正确答案:D    short的大小为2字节;short [100]的大小就是200字节

 

正确答案:A         

下三角矩阵,(假设行列都从1开始算下标)按行存储的话,第一行要存储1个元素(第一个),第二行要存储2个元素(前两个),第i行要存储i个元素(前i个)

则A[i][j]与 A[0][0]之间的元素个数等于前i-1行存储的元素个数加上第i行第j列之前的元素个数

前i-1行存储的元素个数=1+2+...+(i-1)=i*(i-1)/2个

第i行第j列之前的元素个数,如果j>=i,之间的元素个数为i,如果j<i,个数为j-1个

j<=i ? i*(i-1)/2 +j-1: i*(i+1)/2+i

 19

正确答案:B    16个二叉排序树的深度为5,查找一个不存在的最多查到最后一层,即5.    log2(16)+1=5

 20

正确答案:B              当数组过大的时候CPU无法一次性读取整个内存页面,这时候访问数据的时候就会发生页面置换,如果以列序来访问就会发生频繁的置换,这时候就会消耗大量的时间.

语言本身对于数组在内存中是以行优先存储的,所以用行优先读取就不用变换位置,从而更快    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值