[0,2,1,4,3,9,5,8,6,7]是以数组形式存储的最小堆,删除堆顶元素0后的结果是[1,2,5,4,3,9,7,8,6]

今天午饭的时候,刷一下CSDN大数据分析师,百度的面试题,做了8道题,分享给大家

1.【题目】【0、2、1、4、3、9、5、8、6、7】是以数组形式存储的最小堆,删除堆顶元素0后的结果是()。 
 A、【2、1、4、3、9、5、8、6、7】 
 B、【1、2、5、4、3、9、8、6、7】 
 C、【2、3、1、4、7、9、5、8、6】 
 D、【1、2、5、4、3、9、7、8、6】 
解析: 
  删除堆顶,然后总是从堆尾将某个数先放置到堆顶,然后依次下调到符合完全二叉树的要求,即每个子树的两个子节点都比父节点大(最小堆)。过程如下图所示:

                                                                                  图一

                                                                                  图二

                                                                                  图三

需要注意例如第三张图中,2和1在与7比较的时候,2和1先比较一次,哪个小再与7比较,如果比7小则互换,如果比7大则无需转换。
  所以最终答案是D。

2.相似题:

最小堆[0,3,2,5,7,4,6,8],在删除堆顶元素0之后,其结果是(D)

A.[3,2,5,7,4,6,8]

B.[2,3,5,7,4,6,8]

C.[2,3,4,5,7,8,6]

D.[2,3,4,5,6,7,8]

3.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,在加入两个元素后,rear和front的值分别为(A)

A.2和4

B.1和5

C.4和2

D.5和1

解析:

循环队列属于队列,所以bai符合队列的性质。即:“先进先出du”,在队列中“允许插入的一端是队尾,允许删除的一端是队头”。

解析:
循环队列长度是6个节点;可用于存储数据的是5个节点。
(循环队列中:尾指针(rear)指向队列最后一个节点的下一个空白节点。)
本道题目中组成队列的节点号为:3、4、5。

1、删除一个元素,头指针(front)后移一位。头指针指向4。
2、加入两个元素,尾指针(rear)后移两位。尾指针指向2。
所以答案是:( rear:2,front:4 )。

小技巧:当出队列中删除一个元素,也就是出队,即front+1:=4再插入两个元素,即rear+2= 2

4.定义根节点深度为1,有n个元素的完全二叉树的深度是(B)

A.D(n) = log2(n)

B.D(n) = 1 + log2(n)

C.D(n) = n + log2(n)

D.D(n) = 1 + n*log2(n)

解析:

K层完全二叉树,就是前(K-1)层为满二叉树,第K层均为叶结点,可以不满。所以结点与深度的关系为:
2 ^ ( K - 1 ) - 1 < n <= 2 ^ K - 1。 所以K = [ ( n + 1 ) 以 2 为底取对数,然后向上取整 ]。

5.当很频繁的对序列中部进行插入和删除操作时,应该选择使用的容器是(B)

A.vector

B.list

C.deque

D.stack

解析:/

1.vector 底层数据结构为数组 ,支持快速随机访问
2.list 底层数据结构为双向链表,支持快速增删
3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问
4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
5.queue 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时
6.45是适配器,而不叫容器,因为是对容器的再封装
7.priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
8.set 底层数据结构为红黑树,有序,不重复
9.multiset 底层数据结构为红黑树,有序,可重复
10.map 底层数据结构为红黑树,有序,不重复
11.multimap 底层数据结构为红黑树,有序,可重复
12.hash_set 底层数据结构为hash表,无序,不重复
13.hash_multiset 底层数据结构为hash表,无序,可重复
14.hash_map 底层数据结构为hash表,无序,不重复
15.hash_multimap 底层数据结构为hash表,无序,可重复

//

6.判断一个单向链表中是否存在环的最佳方法是(B)

A.两重遍历

B.快慢指针

C.路径记录

D.哈希表辅助

解析:

让快慢指针都从链表表头开始,快指针一次向前移动连个位置,慢指针每次向前移动一个位置。如果快指针到达了NULL,说明不存在环,但如果快指针追上了慢指针,说明存在环。

使用路径记录也可以判断,可以每访问一个节点都设置标志位为1,如果访问到某个节点发现标志位已经为1则是有环,结束则无环。
同样的,哈希表也能达到记录路径的目的,每访问一个节点就把该节点的指针添加进去,然后判断之后访问的节点是否在哈希表中存在。
只不过这些相对于快慢指针所需要的空间复杂度较高

7.一个栈的输入序列为123...n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)

A.不确定

B.n-i+1

C.i

D.n-i

解析:栈是一个罐子一样的,东西先装进去的只能后拿出来,N是最先拿出来了,也是说是全部装进去了再拿出来,所以B

8.在ASC算法team日常开发中,常常面临一些数据结构的抉择,令人纠结。目前大家在策划一个FBI项目(Fast Binary Indexing),其中用到的词汇有6200条,词汇长度在10-15之间,词汇字符是英文字母,区分大小写。请在下面几个数据结构中选择一个使检索速度最快的(D)
A.二叉搜索树,比较函数开销:1次运算/每字符
B.哈希表,hash算法开销:10次运算/每字符
C.链表,比较函数开销:1次运算/每字符
D.TRIE树,寻找子节点开销:1次运算/每字符

解析:该题又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenGd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值