菜鸡的2020年腾讯实习笔试

解析2020年腾讯实习生笔试,涵盖模拟队列、点集距离、卡牌操作、双栈队列及满二叉树节点判断等算法题,分享实战经验和解题思路。

2020年4月26日的腾讯实习生笔试,一共有五道题,给了两个小时。感觉都比较简单,甚至没有粤澳CPC的网络赛难,但是我太菜了,只做出了三道题。
第一道题是签到题:(每一道题我都wa了一遍,可能是紧张导致的?)

1.	模拟队列
输入t,有t组数据
输入n,代表有n个操作
操作有5个:SIZE,CLEAR,PUSH X,POP,TOP。
SIZE:输出队列大小
CLEAR:清空队列不输出
PUSH X:把X放进队列(1<=x<=1000)
POP:把头元素拿掉 如果为空输出-1
TOP:输出头元素(不拿掉),如果为空输出-1
样例
1
PUSH 1
PUSH 2
TOP
POP
TOP
CLEAR
输出:
1
2

第二道题主要是我太菜了,搞不懂,刚开始想着贪心一下,然后O(n^2)跑两个for,肯定tle,然后想着加个退出条件,但是还是过不了,orz,我太年轻了,过了0个样例,后面直接暴力去跑一边,过了60%的case,不知道笔试怎么算分的,题没过但是过了一些case,不知道算不算成绩,这题没整出来。

2.2组点集取名为A点集和B点集,现在从A和B中选取一个,
    求两点间距离的最小值
输入t,有t组数据
输入n,代表点集A和B都有n个
n行为A点集,n行为B点集
保留三位小数
1<=N<=100000
-10^9<=X,Y<=10^9
样例(瞎编,忘了)
1
2
1 1
2 2
5 5
10 10
输出
4.243

第三题n这个值很小,我一开始就觉得是跑个dfs,然后就开始敲代码,刚开始是设置了两个状态,一个是不移动,另一个是和下一个进行交换。然后交了一发,过了10%还是20%的样例,然后又想到一种情况,假设现在有卡牌ABC,我现在在B这个位置,我B和C换后,就变成了ACB然后我C再和A换就变成了CAB了,时间关系,我没有仔细思考完这道题,最后是只过了30%的case。

3.	现在有一套卡牌,从左到右排开,卡牌有正反面,正面的值为ai,
	反面的值为bi,可以翻转相邻的卡牌,翻转的规则:先相互交换位置,
	然后都翻面。现在求最小的操作次数,确保从左到右不为降序。
	
输入n,代表有n个数(n<=18)
接下来有两行 ,每行n个数,第一行为a序列,第二行为b序列
样例
3
1 3 2
1 3 2
输出:
1

第四道题和第一道题签到题类似了。用两个栈模拟队列。我们设置两个栈S1,S2。在我们push操作的时候,就放入S1这个栈,如果需要poll和peek操作的时候,我们把S1的数据倒入S2,在S2进行操作poll和peek,操作完后,再把S2倒回S1就完成了模拟队列了。

4.	用两个栈模拟队列
peek操作为输出队列的头元素
poll操作为去掉头元素
push x操作为把x放入队列
输入q(1<=q<=10^5(-10^?<=x<=10^?)(?为忘记了,不过依稀记得?>=5)
输出要求:
当操作为peek时,输出头元素
样例
5
push 1
push 2
push 3
peek
poll
peek
输出:
1
2

最后一道题不难,题目给的是一颗满二叉树,全部节点都会有。在当前节点除以2就是它的父节点了,我们一直这样进行“ /2 ”操作,最后就会回到根节点:1。然后把这些节点保存道一个数组里,数组最后一个数字就是深度为1的节点。虽然数据有1018,但是对于一颗满二叉树来说,它的深度其实并不大。复杂度O(log2n)

2n=1018(n是深度)
n = log21018
n = 18*log210
3< log210 <4
54<n<72
数组也就开到72左右的大小就足够了

5.	给你一个满二叉树
例:(1节点,2节点,3节点***********1
   2  3
  4 5 6 7
-----------
现在输入一个n,代表第n节点,输入一个x代表深度。(1<=n<=10^18)
判断n节点存不存在深度为x的父节点(或祖父节点,曾祖父节点*****)
有则输出节点编号,没有输出-1
样例
10 1
10 2
10 3
10 4
输出
1
2
5
-1

总结:自己太菜了,要提升的太多了,弱鸡快要窒息了,又酸又菜又多鱼,继续加油吧~

### 编程入门与IT基础学习资源 #### 计算机硬件、软件及网络基础 信息技术(IT)涵盖了多个领域,其中包括计算机硬件、软件以及网络基础。对于初学者而言,理解这些核心概念至关重要。计算机硬件涉及处理器、内存、存储设备等物理组件;而软件则指操作系统、应用程序和服务程序。至于网络基础,则主要探讨数据传输协议、IP地址分配等内容[^1]。 #### 零基础编程学习路径 针对完全没有经验的新手,可以从以下几个方面入手: - **掌握基本概念**:熟悉诸如变量、函数、数组这样的基础构建模块,并尝试编写简单的脚本来巩固所学知识点。 - **实践操作**:参与实际项目的开发过程非常重要。可以通过复制现有优秀作品来提高技能水平,同时也可以寻找适合新手的小型项目进行独立完成。 - **分享传播知识**:当能够清晰表达某个主时,往往意味着对该领域的深入理解和熟练运用。因此,撰写技术博客或录制教学视频也是一种有效的复习手段[^3]。 #### 推荐书籍清单 为了更系统化地获取专业知识,《大学学习计算机基础必读 5 本经典入门书籍》提供了很好的指导方向。尽管像《TCP/IP 卷一》这样较为晦涩难懂的作品可能存在一定难度,但对于希望进一步探索高级话的人来说仍然是不可多得的好书[^4]。 以下是几个具体推荐选项供参考: 1. Python Crash Course, Eric Matthes – 这本书籍非常适合刚开始接触编码的人群,它采用循序渐进的方法教授Python语言的核心特性及其应用实例; 2. Automate the Boring Stuff with Python, Al Sweigart – 主要关注利用自动化工具简化日常任务处理流程的实际案例分析; 3. Introduction to Computation and Programming Using Python, John V Guttag – 结合计算思维训练介绍如何使用Python解决问的过程描述。 ```python # 示例代码展示简单加法运算功能实现方式如下所示: def add_numbers(a, b): """返回两个数相加之和""" result = a + b return result print(add_numbers(5 ,7)) # 输出结果应为12 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KnightHONG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值