腾讯2021实习生招聘-技术研究和数据分析笔试凉经

腾讯实习笔试,无论什么岗位都会给3次笔试机会(有些岗位无笔试),取最近一次的考试成绩,可以选择不参加,但作为简历筛选的重要指标,建议至少有一个成绩(谁知道呢,HR小姐姐说的- -)

  • 题型:五道编程题,全部是牛客网的ACM模式,即全程手撕代码,需要自己处理代码的输入与输出
  • 难度:噩梦级(自认为是所有企业里技术类实习笔试最难的,其他大厂至少还会出几道选择题给你点自信,QaQ)
  • 语言:你知道的所有通用化的计算机语言都可以

我个人建议使用语言c++/python,原因:速度快,会c++最好用C吧,毕竟快如一道闪电,很多题你没其他思路只能暴力求解,这对于语言的底层速度有着极大的考验,我自己用的Python(不建议用R,因为输入输出均要求为字符串,用R处理个人认为极不方便,且速度比python慢得多得多,在这方面python真香,正经人谁用R啊~)

  • 小经验:我已考了三次,直接去世那种,不过虽然笔试很难,但是每次的5道题中必有一道数学题(确信!!),即几何代数微积分的题目(套着编程的外套的数学题),对于我们这样的理科生必做啊,毕竟其他的题咱这样的编程小白基本都是白给...

下面为此次考试的题目,请各位食用(建议自备呕吐袋!)
1. 给你一个序列,共n个数,以及另外m个单独的数ai,i=1,2,...m
对于每个ai,查看序列中是否有两个数的差与ai相等,若有输出任意满足条件的两个数,若无输出“-1 -1”

我觉得这题难度中等,可以看懂... 所以我用暴力法接了,但算法复杂度还是太高,超时了,只过了56%,凉了 QaQ

t = [int(x) for x in input().strip().split()]
n = t[0]
m = t[1]
ji = set()
shu = [int(x) for x in input().strip().split()]
for j in range(n - 1):
    wei = j + 1
    for k in range(n - wei):
        ab = abs(shu[j + k + 1] - shu[j])
        if ab not in ji:
            ji.add(ab)
for i in range(m):
    w = int(input().strip())
    kan = 0
    if w not in ji:
        print("-1 -1")
    else:
        for j in range(n - 1):
            wei = j + 1
            if kan == 1:
                break
            for k in range(n - wei):
                ab = abs(shu[j + k + 1] - shu[j])
                if ab == w:
                    print(shu[j + k + 1], shu[j], sep=" ")
                    kan = 1
                    break

2. 给你两个只包含小写字母的字符串,有m个问题,对于每个问题会先对这两个字符串的前部(给位置t1,t2)进行切片,然后问你这两个切片后的字符串的“再切片字符串”中满足特定条件之一的字符串组的长度之和最大为多少,要求第二次再切片字符串长度不为0?条件为:1.第一个再切片字符串长度为0,即切没了 2.第一个再切片字符串的首字母在字典序的意义下小于第二个再切片字符串的首字母。

emm...这题看了半天算是看懂了,解也解出来了一点,但只过了18%的样例,不知道错在哪,请大家指正

s = input().strip()
p = input().strip()
n = int(input().strip())
for i in range(n):
    t = [int(x) for x in input().strip().split()]
    s_1 = s[t[0]-1:]
    t_1 = p[t[1]-1:]
    ji = set()
    min = len(t_1)
    ji.add(min)
    for j in range(len(s_1)):
        chang_z = len(s_1[j:]) + len(t_1)
        if chang_z <= max(ji):
            continue
        else:
            for k in range(len(t_1) - 1):
                if s_1[j:][0] < t_1[k:][0]:
                    ji.add(len(s_1[j:]) + len(t_1[k:]))
                    break
    print(max(ji))
  1. 没错这题就是那个之前提到的那道数学题,我就不过多赘述了,大概意思是给你个圆心图片说明 和半径图片说明 ,再给你一个在这个圆内的但不与圆心重合的一个点图片说明 ,以这个点为端点,连接圆心,作一条射线,交圆周于一点 ,然后让你求以这个交点 和图片说明为直径的圆的圆心图片说明和半径图片说明

以下给出我的代码,但是它只过了70%???我觉得没毛病啊,好吧,估计TX是整了一些幺蛾子,这下彻底凉透了!qaq

t = [float(x) for x in input().strip().split()]
r_1 = t[0]
x_1 = t[1]
y_1 = t[2]
x_3 = t[3]
y_3 = t[4]
d = ((x_1-x_3)**2+(y_1-y_3)**2)**0.5
r_2 = (d + r_1) / 2
if x_1 == x_3:
    x_2 = x_1
    if y_3 < y_1:
        y_2 = y_3 + (r_1+d)/2
    else:
        y_2 = y_1 - (r_1 + d) / 2
elif x_1 < x_3:
    x = r_1 * (x_3 - x_1) / d
    x_2 = x_3 - (x + x_3 - x_1) / 2
    y_2 = y_1 + ((y_3 - y_1) / (x_3 - x_1)) * (x_2 - x_1)
else:
    x = r_1 * (x_1 - x_3) / d
    x_2 = x_3 + (x + x_1 - x_3) / 2
    y_2 = y_1 + ((y_3 - y_1) / (x_3 - x_1)) * (x_2 - x_1)
print(x_2, y_2, r_2, sep=" ")

4. 好了,变态的来了,这题考了一道我看不懂的,大概意思是给你平面上n个点,然后让你找出他们所有dfs遍历序列中的在字典序意义下的最小序列。好吧,我可能表述不清,但我知道考点必定在dfs遍历,这个咱么听过啊,我刚百度了一下,这真没学过,咱认了...

5. 这题很短,n双鞋,每次从中抽2只鞋,分给n个人,问:能刚好分到左脚的鞋和右脚的鞋都有的人的数量的期望

omg~,人狠话不多,当场去世,这我很难看不懂,但却又无从下手...我觉得这题应该是要用递归?但我没时间了,就没做,看大家有没有什么解法...

#实习##面经##腾讯##数据分析师#
全部评论
只完全做出来最后一道题,就是直接返回一个数学式子
1 回复 分享
发布于 2021-04-19 20:42
最后一道题n方除以(2n-1)
1 回复 分享
发布于 2021-04-22 23:47
表示第一题 例子 3 6 9 求差为3的;为何例子答案给的6 9而不是 3 6 是我又看漏了什么条件吗😀😀😀
点赞 回复 分享
发布于 2021-04-19 11:18
最后一题我直接用的10000次结果然后取均值 然而不对…
点赞 回复 分享
发布于 2021-04-19 18:30
第一题可以用字典吧,会减少一个for循环
点赞 回复 分享
发布于 2021-05-27 13:12

相关推荐

评论
8
58
分享
牛客网
牛客企业服务