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

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无法一次性读取整个内存页面,这时候访问数据的时候就会发生页面置换,如果以列序来访问就会发生频繁的置换,这时候就会消耗大量的时间.

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

### 关于小蓝刷题的相关资源和平台 对于像小蓝这样热爱编程竞赛并希望提高解题能力的人来说,有许多优质的资源和平台可以利用。以下是几个推荐的方向: #### 1. **蓝桥杯官方及相关资源** 蓝桥杯作为国内知名的编程竞赛之一,提供了丰富的题目库以及历年真题解析。通过这些资源可以帮助参赛者熟悉比赛形式和难度水平[^1]。 - 官方网站提供历年的试题下载服务。 - 社区论坛中也有许多选手分享自己的解题思路和经验。 #### 2. **牛客网** 牛客网是一个专注于算法训练和技术面试准备的学习平台,在这里可以通过模拟真实考试环境来练习各种类型的编程挑战[^3]。它不仅拥有大量的经典习题集,还特别针对不同赛事设计了专项课程,比如专门面向蓝桥杯的备考计划[^4]。 ```python # 牛客网上的典型例题演示 (假设为一道简单的字符串匹配问题) def count_substring(s, sub): """计算子串出现次数""" count = start = 0 while True: start = s.find(sub, start) if start == -1: break count += 1 start += len(sub) # 移动指针继续查找下一个位置 return count matrix = [ "2020", "0202", "2020" ] result = sum(count_substring(row, "2020") for row in matrix) print(f"矩阵中共有 {result} 个 '2020'") ``` 上述代码片段展示了如何在一个二维字符数组中统计特定模式(如`2020`)的数量,这是基于某类常见笔试/机试场景下的实现方法[^2]。 #### 3. **LeetCode 和 Codeforces** 除了本土化的练习渠道外,国际知名在线评测系统 LeetCode 及 Codeforces 同样值得探索。它们覆盖广泛的主题领域,并定期举办全球范围内的竞技活动,能够有效锻炼逻辑思维能力和编码技巧。 #### 4. **书籍与教程视频** 如果更倾向于系统化学习,则可以选择阅读一些经典的计算机科学教材或者观看高质量的教学录像。例如,《算法导论》、《Python Cookbook》等都是极佳的选择;而B站上也有很多UP主制作了关于数据结构&算法入门至精通系列的内容供参考。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值