美团点评2017校招笔试真题-算法工程师A

1.下面哪种STL容器的实现和其它三个不一样

A. set

B. deque

C. multimap

D. map

正确答案: B

STL的容器可以分为以下几个大类:

1、 顺序(序列)容器,有 vector,list,deque , string,stack( 适配器类), queue( 适配器类), priority queues( 适配器类)。

2、关联容器,有set, multiset,map,multimap, bitset,hash_set, hash_map, hash_multiset, hash_multimap。

2. 一颗高度为4 的平衡二叉树,其最少节点数为

A. 5

B. 6

C. 7

D. 8

正确答案: C

假设深度为n的平衡二叉树至少有F(n)个结点,那么F(n)满足 F(n)=F(n-1)+F(n-2)+1

平衡的二叉树是对二叉树的一种“平衡化”处理。结点的平衡因子定义为其右子树高度减去左子树高度。若任一结点的平衡因子均取值-1,或0,或+1,则此二叉排序树为平衡的二叉排序树。根据这个原则,可得最少结点数为7。

3. 一共三个结点的二叉树可能出现多少种结构

A. 3

B. 4

C .5

D. 6

正确答案: C

节点的形态数 = 卡特兰数 = (2n!)/(n!*n!*(n+1))

4. 以下哪种不是非稳定排序算法

A 归并排序

B. 快速排序

C 堆排序

D 希尔排序

正确答案: A

(1)冒泡排序

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

(2)选择排序

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

(3)插入排序

插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

(4)快速排序

快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j,交换a[i]和a[j],重复上面的过程,直到i > j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为5 3 3 4 3 8 9 10 11,现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和a[j] 交换的时刻。

(5)归并排序

归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破坏稳定性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结果序列的前面,这样就保证了稳定性。所以,归并排序也是稳定的排序算法。

(6)基数排序

基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。

(7)希尔排序(shell)

希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小, 插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比O(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。

(8)堆排序

我们知道堆的结构是节点i的孩子为2 * i和2 * i + 1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n 的序列,堆排序的过程是从第n / 2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n / 2 - 1, n / 2 - 2, ... 1这些个父节点选择元素时,就会破坏稳定性。有可能第n / 2个父节点交换把后面一个元素交换过去了,而第n / 2 - 1个父节点把后面一个相同的元素没 有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序不是稳定的排序算法。

综上,得出结论: 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法

5. 现有一段文本,其中只有A,B,C,D,E包含五个字母,它们出现的次数分别是A出现1次,B出现2次,C出现10次,D出现6次,E出现4次,那么经过哈弗曼编码后,各个字母对应的编码可能是下面哪一组?

A.A=1101,B=1100,C=0,D=10,E=110

B.A=1100,B=1101,C=0,D=10,E=111

C.   A=1111,B=1101,C=10,D=0,E=110

D . A=1101,B=1100,C=10,D=0,E=111

正确答案: B

6. 设某棵三叉树中有36个节点,则该三叉树的最小高度是

A. 3

B. 4

C. 5

D. 6

正确答案: B

最小高度就是除叶子外,每个结点都有3个孩子的三叉树的高度:

设根结点层次为1

第一层:1个结点

第二层最多有:3个结点

第三层最多有:9个结点

第四层有:27个结点

1+3+9=13<27,  36<1+3+9+27 所以高度为4

时间: 2024-08-07 23:20:55

美团点评2017校招笔试真题-算法工程师A的相关文章

运维工程师笔试真题:美团点评 2017 春招真题

1.数据库索引可以明显提高哪一操作的效率?正确答案: A A SELECTB INSERT INTO - VALUES -C UPDATED DELETE 2.数据库:以下哪种锁定方式能提供最佳的并行访问性能?正确答案: D A 列锁定B 表锁定C 块锁定D 行锁定 3.从DELETE 语句中省略WHERE 子句,将产生什么结果?正确答案: B A DELETE 语句将失败因为没有记录可删除B DELETE 语句将从表中删除所有的记录C DELETE 语句将提示用户进入删除的标准D DELETE

美团点评2017校招研发offer面经

2017届的校招早早就结束了,抽出时间做个记录. 职位:后台开发工程师 岗位职责: 如果你热爱编程,这里给你平台用代码改变世界: 如果你乐于挑战,这里有用户和商家五花八门的需求和苛刻的系统运行环境在等待着你: 在这里,你可以参与后端模块.数据平台.基础服务和云计算功能的开发工作: 在这里,你还将参与需求定义,确定设计方案并负责最终实现: 你需要对代码质量负责,确保代码正确无误,高效工作,无QA,你的代码你做主! 工作要求: 1. 一句话,会写代码.你可以是本科及以上计算机相关专业的科班出身,也可

《欢聚时代2017校招笔试题目(PHP工程师类)---错题解析》

8某06痘翁4用wm潘脖柿http://www.zcool.com.cn/collection/ZMTgwMDY4MzY=.html y1凶萄Dp速06蕉j仑诰窍http://www.zcool.com.cn/collection/ZMTgwMDY4NDA=.html P啦0s47Rdlb匪http://www.zcool.com.cn/collection/ZMTgwMDcwMTI=.html 64诙椭偕期0qgw劫湛http://www.zcool.com.cn/collection/ZMT

美团点评2017秋招笔试编程题

美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法. 题解: 写出前面的几个, 1 -> 1;   2 -> 2 ;  3 -> 4;   4 -> 8; 5 -> 16; 6 -> 32; 可以得到是 二的 n-1 次幂. #include <cstdio> int

好未来2017秋招笔试真题二 --牛客网

好未来2017秋招笔试真题二 --牛客网 链接:https://www.nowcoder.com/questionTerminal/ee5de2e7c45a46a090c1ced2fdc62355来源:牛客网 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100 输出描述: 依次输出倒置之后的字符串,以空格分割 输入例子: I

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

quna 笔试真题 字符串解压

quna 笔试真题 字符串解压 个人信息:就读于 燕大本科 软件工程专业 目前大四; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:Java ; 编程坏境:Windows 8.1 x64; 编程工具:eclipse; 制图工具:office 2007 powerpoint; 硬件信息:华硕X54HR 笔记本; 恋爱情况:处于被夺初吻的热恋中; 题目: 给出一个字符串如 a1b2c3ab10 将其

《PHP面试笔试真题库》——PHP面试的好帮手

你好,是我琉忆. 一个文艺的PHP开发工程师. 很荣幸能够在这里带来我的第一本新书——<PHP程序员面试笔试真题库>. 一.创作过程 <PHP 程序员面试笔试真题库>是我的第三本书,继<PHP 程序员面试笔试宝典>和<PHP 程序员面试笔试真题解析>后的第三本.它的出现完全是为了弥补宝典和真题解析的欠缺.宝典重点讲的是PHP相关的知识点,而真题解析针对的重点则是面试题的讲解,而真题库的重点在于罗列往年的PHP套题,让应聘者自行去测试PHP真题,更好的应对PH

《PHP程序员面试笔试真题解析》——新书上线

你好,是我--琉忆.很高兴可以跟你分享我的新书. 很高兴,在出版了PHP程序员面试笔试宝典后迎来了我的第二本书出版--<PHP程序员面试笔试真题解析>. 如果你是一个热爱PHP的程序员,刚踏入PHP职场,你值得拥有这本书来自学一番,再去尝试找PHP相关的工作,对你帮助绝对不是一般的大!! PS:宝典和真题解析其实是一套的~ 以下简单的对我的新书做个介绍~ 前言 本书的适用群体:刚接触PHP,自学一段时间PHP后打算去找PHP相关的PHP面试工作的群体.这部分群体可以尝试着去练习这部分企业中经常