最全名企笔试题+算法题

本文精选了一系列经典算法问题,涵盖二叉树、排序算法、字符串处理、数据结构等多个方面,旨在帮助读者深入理解并掌握常见算法的应用场景及其解题技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

·给定一颗二叉树,要求输出二叉树的深度以及中序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000。

Input

输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层8个…….,如果某个结点不存在以0代替)

Output 

输出每棵二叉树的深度以及中序遍历二叉树得到的序列。 

输入示例: 

2

1 -1

1 2 03 4 -1 

输出示例: 

1 1

3 3 24 1

 

 

 

 

 

·操作系统中可以使用LRU(Least Recently Used)内存淘汰旧数据的策略,如果内存需要加载新数据但空间不足,则会按照最近访问时间进行排序,并将最老的数据淘汰。假设现在内存空间大小为5,原本内存中没有数据,对内存中数据的访问顺序如下: 

1,2,5,3,4,6,1,4,3,6,7,8,3,9 

问访问过程中发生缺页的次数是多少次? 

A. 缺页次数:4

B. 缺页次数:10

C. 缺页次数:5

D. 缺页次数:9

 

 

 

·设一组初始记录关键字序列为(49、38、65、97、76、13、27、49),则以第一个关键字49为基准而得到的一趟快速排序结果是() 

A. 38,13,27,49,49,65,97,76

B. 13,27,38,49,65,76,97,49

C. 27,38,13,49,76,97,65,49

D. 27,38,13,49,97,76,65,49

  

 

 

·使用 KMP 算法在文本串 S 中找模式串 P 是一种常见的方法。假设 S=P={xyxyyxxyx},亦即将 S 对自己进行匹配,匹配过程中正确的 next数组是____。 

A. 0,1,1,2,2,1,2,2,3

B. 0,1,2,2,3,1,2,2,3

C. 0,1,1,2,3,1,2,2,3

D. 0,1,1,2,3,1,1,2,3

E. 0,1,2,2,3,1,1,2,3

F.  0,1,2,2,2,1,1,2,3

  

 

 

·已知二叉树中有45个叶节点,有25个度为1的节点,则二叉树的总结点数为____ 

A. 112

B. 113

C. 114

D. 115

E. 116

F. 117

 

 

 

 

·设x和y是二叉树中的任意两个节点,若在先根序列中x在y之前,而在后根序列中x在y之后,则x和y的关系是(  )

A、 x是y的右兄弟

B、 x是y的子孙

C、x是y的祖先

C、 x是y的左兄弟

 

  

 

 

·有两个完全相同的正方体,各面分别有数字1,2,3,4,5,6.把两个正方体放到桌子上,正面的数字加起来等于偶数的情形有多少种(  )(提示:1+3与3+1是一种情况)

A、 24

B、 9

C、 18

D、 12

 

 

 

 

 

 

·已知数据元素为(34,76,45,18,26,54,92,65),按照依次插入节点的方法生成一棵二叉排序树,则该树的深度为(  )

A、 7

B、 6

C、 4

D、 5

 

 

 

 

 

·对关键码序列28,16,32,12,60,2,5,72快速排序,从小到大一次划分结果为( )

A、 (5,16,2,12)28(60,32,72)

B、 (2,5,12,16)28(60,32,72)

C、 (2,16,12,5)28(60,32,72)

D、 (5,16,2,12)28(32,60,72)

 

 

 

 

 

·用三叉链表作二叉树的存储结构,当二叉树中有n个结点时,有(  )个空指针。

A、 n+1

B、 n

C、 n+2

D、 n-1

 

 

 

 

 

 

 

·输入序列是ABC,输出序列变为BCA时,经过的栈操作为(  )

A、 push,push,push,pop,pop,pop

B、 push,push,pop,push,pop,pop

C、 push,pop,push,push,pop,pop

D、 push,push,pop,pop,push,pop

 

 

 

 

 

 

·下面关于求关键路径的说法不正确的是(  )

A、 一个事件的最迟开始时间为以该事件为尾的弧的活动最迟开始时间与该活动的持续时间的差

B、 求关键路径是以拓扑排序为基础的

C、 一个事件的最早开始时间同以该事件为尾的弧的活动最早开始时间相同

D、 关键活动一定位于关键路径上

 

 

 

 

·已知关键字序列5,8,12,19,28,20,15,22是最小堆,插入关键字3,调整后得到的最小堆是(  )

A、 3,8,12,5,20,15,22,28,19

B、 3,5,12,19,20,15,22,8,28

C、 3,12,5,8,28,20,15,22,19

D、 3,5,12,8,28,20,15,22,19

 

 

 

 

 

·题目描述 

“呼!!终于到了,可是接下来要怎么走才能到达楚楚街港港呢?”亮亮在醋溜港直发愁。 

 突然“啾”的一下,一只银色小船出现在亮亮的面前,上面坐着小精灵丹丹“又见面了,有什么可以帮助你的么?” 

小精灵向亮亮眨了眨眼睛,微笑着说。 “我想去楚楚街港,但我不知道要怎么走,请问你可以告诉我么?”亮亮按捺着激动的心情轻声问道。 

 “楚楚街港呀……那是个特别美好的地方”小精灵歪着头想了想,说“我只能告诉你大海上所有的航线,剩下的就只能靠你自己啦~” 

“只有所有的航线呀”,亮亮的内心再三挣扎,却又没有其他的办法。 “不管有多困难,我一定要达到楚楚街港,请你告诉我吧”亮亮坚定地对小精灵说。  

小精灵欣赏地点了点头,递给亮亮一张航线图,并叮嘱道“时限是1000天,一定要到哦~”,然后如来时一般“啾”的一声,消失了。 

亮亮现在迫切地想要抵达楚楚街港,请问亮亮最快能在第几天抵达楚楚街港呢? 

输入描述: 

一行包含两个整数 N(2<=N<=500),M(1<=M<=2000),用单个空格隔开。表示公有 N 个港,M 条航线。起点为 1,终点为 N。 

接下来 M 行,每行包含五个整数P,Q(1<=P,Q<=n),K(1<=K<=1000),X,Y(0<=X,Y<=10000),代表 P、Q 两个港有航线并需要 K 天,并且该航线在第 X 天到第 Y 天天气恶劣不可通行。 

输出描述: 

一个整数,即亮亮最快能在第几天抵达楚楚街港 

输入例子: 

4 4

2 1 17 13

4 3 210 11

1 3 89 12

2 3 32 10 

输出例子: 

14

 

 

 

 

 

 

·题目描述 

亮亮深吸一口气,小心地将盒子打开,里面是一张地图,地图上除了一些奇怪的字母以外没有任何路线信息,这可让亮亮犯了愁,这些字母代表了什么意思呢? 亮亮绞尽脑汁也想不出什么思路,突然,亮亮眼前一亮,“我可以把这些字母所有的排列方式全部写出来,一定可以找到答案!” 于是,亮亮兴奋的开始寻找字母里的秘密。 

输入描述: 

每组数据输入只有一行,是一个由不同的大写字母组成的字符串,已知字符串的长度在1到9之间,我们假设对于大写字母有’A’ < ‘B’ < … < ‘Y’ < ‘Z’。 

输出描述: 

输出这个字符串的所有排列方式,每行一个排列,要求字母序比较小的排列在前面。 

输入例子: 

WHL 

输出例子: 

HLW

HWL

LHW

LWH

WHL

WLH

 

 

 

 

 

 

·题目描述 

原来是要到醋溜站台乘坐醋溜快车到醋溜港”,亮亮解出了地图隐藏的秘密,赶紧奔向醋溜站台,但到了之后,亮亮忧桑地发现,从醋溜站台到醋溜港沿途的每个车站都有很多美女被他飒爽的英姿所吸引,只要经过车站就会被这些漂亮的女孩搭讪,但是现在亮亮一心想要寻找楚楚街而没空去搭理她们,所以亮亮希望在抵达醋溜港的时候被搭讪的次数最少。问亮亮抵达醋溜港最少会被搭讪多少次? 

输入描述: 

第一行包含两个整数N(2<=N<=5000),M(1<=M<=50000)。N表示公有N个汽车站,M表示公有M条公路,起点为1,终点为N。

第二行包含N个整数(0<=K<=10000),第i个整数表示在第i站有K个美女想要搭讪亮亮。

接下来M行,每行包含两个整数P(1<=P<=N),Q(1<=Q<=N),代表P,Q两个站是有班车直达的。 

输出描述: 

一个整数,即亮亮抵达醋溜港最少需要被搭讪的次数。 

输入例子: 

5 5

0 1 13 6

1 2

1 4

2 3

3 5

4 5 

输出例子: 

8

 

 

 

 

 

 

 

·输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如::n = 10; n! = 3628800,所以答案为2 

输入描述: 

输入为一行,n(1 ≤ n ≤ 1000) 

输出描述: 

输出一个整数,即题目所求 

输入例子: 

10 

输出例子: 

2

 

 

 

 

 

 

·题目:

公司进行了一次黑客马拉松大赛,全公司一共分为了N个组,每组一个房间排成一排开始比赛,比赛结束后没有公布成绩,但是每个组能够看到自己相邻的两个组里比自己成绩低的组的成绩,比赛结束之后要发奖金,以1w为单位,每个组都至少会发1w的奖金,另外,如果一个组发现自己的奖金没有高于比自己成绩低的组发的奖金,就会不满意,作为比赛的组织方,根据成绩计算出至少需要发多少奖金才能让所有的组满意。  

输入描述:

每组数据先输入N,然后N行输入N个正整数,每个数表示每个组的比赛成绩。 

输出描述:

输出至少需要多少w的奖金 

示例1 

输入 

10

20 

32 

12 

32 

45 

11 

21 

31 

41 

33 

输出

20

 

 

 

 

 

 

 

 

 

·设有一组关键字序列{5,8,14,20,31,55,78,81,93,97,111},使用二分(折半)法查找关键字93需要进行多少次比较() 

A. 2

B. 3

C. 4

D. 5

 

  

 

 

 

·题目:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?

输出需要删除的字符个数。

输入描述:

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 

输出描述:

对于每组数据,输出一个整数,代表最少需要删除的字符个数。 

输入例子:
abcda
google 
输出例子:
2
2

 

 

 

 

 

·题目描述 

输入一个字符串,求出该字符串包含的字符集合 

输入描述: 

每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。 

输出描述: 

每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。 

输入例子: 

abcqweracb 

输出例子: 

abcqwer

 

 

 

 

·对关键字{25,15,30,10,50,3,5,60}序列进行快速排序,第一趟从小到大一次划分结果为( ) 

A. {3,5,10,15} 25 {50,30,60}

B. {5,15,3,10} 25 {50,30,60}

C. {3,15,10,5} 25 {50,30,60}

D. {5,15,3,10} 25 {30,50,60}

 

 

 

 

 

 

·题目: 

有如下一个类似跳表的数据结构:每层都是已经排好序的链表,level1层的链表有所有元素,levelN 层的链表只有 levelN-1 的 1 半的元素,levelN 层的结点指向levelN-1 层中相同的结点。请问查找一个元素的时间复杂度是() 

A、(logn)

B、(n)

C、(nlogn)

D、O(n^2)

 

 

 

 

 

·题目: 

一个有n个结点的连通图的生成树是原图的最小连通子图,且包含原图中所有n个结点,并且有保持图联通的最少的边。最大生成树就是权和最大生成树,现在给出一个无向带权图的邻接矩阵,权为0表示没有边。{{0,4,5,0,3},{4,0,4,2,3},{5,4,0,2,0},{0,2,2,0,1},{3,3,0,1,0}},求这个图的最大生成树的权和。 

A、11

B、12

C、13

D、14

E、15

 

 

 

 

 

·题目描述 

在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。 

给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。 

测试样例: 

[10,22,5,75,65,80],6 

返回: 

87

 

 

 

·大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。  

输入描述: 

输入包括一个整数n,(1 ≤ n ≤ 6) 

输出描述: 

输出一个整数,表示投骰子的方法 

输入例子: 

6 

输出例子: 

32

 

 

 

 

 

 

·给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。  

输入描述: 

输入包括两行,第一行包含一个整数n(1 ≤ n ≤ 10000)

第二行包括n个整数,表示h数组中的每个值,h_i(1 ≤ h_i ≤ 1,000,000) 

输出描述: 

输出一个整数,表示最大的矩阵面积。 

输入例子: 

6

2 1 56 2 3 

输出例子: 

10

 

 

 

 

 

 

 

·题目描述 

给定一个字符串,问是否能通过添加一个字母将其变为回文串。 

输入描述: 

一行一个由小写字母构成的字符串,字符串长度小于等于10。 

输出描述: 

输出答案(YES\NO). 

输入例子: 

coco 

输出例子: 

YES

 

 

 

 

 

 

 

 

·绘画展览门票每张5元,如果有2*n个人排队购票,每人一张,并且其中一半人恰有5元钱,另一半人恰有10元钱,而票房无零钱可找,那么如何将这2*n个人排成一列,顺次购票,使得不至于因票房无零钱可找而耽误时间,应该采用什么算法解决呢?

 

 

 

 

 

 

 

 

·题目: 

在N*M的草地上,提莫种了K个蘑菇,蘑菇爆炸的威力极大,兰博不想贸然去闯,而且蘑菇是隐形的。有一种叫做扫描透镜的物品可以扫描出隐形的蘑菇,于是他回了一趟战争学院,买了2个扫描透镜,一个 扫描透镜可以扫描出(3*3)方格中所有的蘑菇,然后兰博就可以清理掉一些隐形的蘑菇。问:兰博最多可以清理多少个蘑菇?

注意:每个方格被扫描一次只能清除掉一个蘑菇。  

输入描述:
第一行三个整数:N,M,K,(1≤N,M≤20,K≤100),N,M代表了草地的大小;
接下来K行,每行两个整数x,y(1≤x≤N,1≤y≤M).代表(x,y)处提莫种了一个蘑菇.
一个方格可以种无穷个蘑菇. 
输出描述:
输出一行,在这一行输出一个整数,代表兰博最多可以清理多少个蘑菇.

 

 

 

 

·题目:

有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。 

给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。 

测试样例:3,返回:2


 

 

 

·题目描述 

两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。 

游戏规则: 

共52张普通牌,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张; 每人抓三张牌。两人比较手中三张牌大小,大的人获胜。 

对于牌型的规则如下:

1.三张牌一样即为豹子

2.三张牌相连为顺子(A23不算顺子)

3.有且仅有两张牌一样为对子 豹子>顺子>对子>普通牌型 在牌型一样时,比较牌型数值大小(如AAA>KKK,QAK>534,QQ2>10104) 在二人均无特殊牌型时,依次比较三张牌中最大的。大的人获胜,如果最大的牌一样,则比较第二大,以此类推(如37K>89Q) 如二人牌面相同,则为平局。

 

输入描述: 

输入两个字符串代表两个玩家的牌(如”10KQ” “354”),先输入的作为玩家1,后输入的作为玩家2 

输出描述: 

1 代表 玩家1赢 0 代表 平局 -1 代表 玩家2赢 -2 代表不合法的输入 

输入例子: 

KQ33Q9

10QA6102

58107KK

63274J

10102K77

JKJ926

68K27A 

输出例子:

1

1

-1

-1

1

1

-1

 

 

 

 

 

 

·给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱) 例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},长度为6。 

输入描述: 

第一行包含一个整数T,代表测试数据组数。

对于每组测试数据: N-数组的长度

a1 a2… an (需要计算的数组)

保证: 1<=N<=3000,0<=ai<=MAX_INT. 

输出描述: 

对于每组数据,输出一个整数,代表最长递增子序列的长度。 

输入例子: 

2

7

89256 78 1 46 78 8

5

6 4 82 17 

输出例子: 

3

3

 

 

 

 

·题目描述 

给定两个字符串A、B(只包含26个英文字母),输出所有公共的最长子字符串(如果出现重复子串,则输出多次) 

输入描述 

输入包括两行,每行为一个连续字符串(大小写敏感) 

输出描述 

输出包括多行,每行为扫描到的最长公共子串,按照该子串在字符串A(即第一行输入字符串)中出现的先后次序输出 

样例输入: 

abcxyzabcrst

opqrstabc 

样例输出: 

abc

abc

rst

 

 

 

 

 

 

·题目描述 

小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3…bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少? 

输入描述: 

对于每组数据,第一行是两个整数n(1≤n<100000)表示怪物的数量和a表示小易的初始能力值.

第二行n个整数,b1,b2…bn(1≤bi≤n)表示每个怪物的防御力 

输出描述: 

对于每组数据,输出一行。每行仅包含一个整数,表示小易的最终能力值 

输入例子: 

3 50

50105 200

5 20

30 2015 40 100 

输出例子: 

110

205

 

 

 

 

 

 

·风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 

假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设法计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100 

输入例子: 

3,8,5,1,7,8 

输出例子: 

12

 

 

 

 

 

·已知关键字序列[46, 79, 56, 38, 40, 84],采用快速排序(以位于最左位置的关键字为基准)得到的第一次划分结果为 

A. [40, 38, 56, 46, 79, 84]

B. [38, 46, 79, 56, 40, 84]

C. [38, 46, 56, 79, 40, 84]

D. [40, 38, 46, 79, 56, 84]

 

 

 

 

·题目:用二进制来编码字符串“abcdabaa”,需要能够根据编码,解码回原来的字符串,最少需要多长的二进制字符串?()
A.12
B.14
C.18
D.24

 

 

 

 

 

·题目: 

假设支付宝红包口令支持 1 到 6 位的数字组合,即'0'、'1'、'003'和'999999'都是合法的红包口令,那么总共可以有多少个合法的红包口令______ 

A、999999

B、1000000

C、1010100

D、1010101

E、1111110

F、1111111

 

 

 

 

 

 

·题目: 

一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。  

输入描述: 

输入包括两行:

第一行为整数n(1 ≤ n ≤ 50)

第二行为n个整数length[i](1024 ≤ length[i] ≤4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。 

输出描述: 

输出一个整数,表示最少需要处理的时间 

输入例子1: 

5

30723072 7168 3072 1024 

输出例子1: 

9216

 

 

 

 

 

 

 

·题目: 

n 个字符构成的字符串,假设每个字符都不一样,问有多少个子串? 

A、n+1

B、n(n+1)/2+ 1

C、2^n-1

D、n!

 





Good luck!

Write by  Jimmy.li












 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值