美团秋招 第八场 技术笔试 10-7-2023
第一题,模拟二进制,求需要操作的次数
二进制是每次1010这样,假如输入数值是10101,只需要1次就能获得
假如输入30203,就需要3次
非常简单的题
胡乱写的解
# shuru = str(input()) shuru = '30302' max =0 for i in range(len(shuru)): if(int(shuru[i]) > int(max)): max = shuru[i] if(max == '9'): break print(int(max))
第二题,找宝藏
给你可以操作的次数
给你宝藏的价值列表
给你需要挖的最小价值列表
输出最多能挖多少次
import sys # can_get = int(input()) # baoz = list(map(int,input().split())) # zuidi = list(map(int,input().split())) can_get = 5 baoz=[1,2,3,4,1,2] zuidi =[3,1,2,3,2,2] baoz.sort() zuiduo = 0 for i in range(can_get): for y in range(len(baoz)): if zuidi[i] <= baoz[y] : baoz.pop(y) zuiduo +=1 break print(zuiduo)
这个n2的解是超时的,几年没玩oj一时想不到怎么优化,晚些丢gpt看看
双指针解
can_get = 5 baoz = [1, 2, 3, 4, 1, 2] zuidi = [3, 1, 2, 3, 2, 2] baoz.sort() zuiduo = 0 i, j = 0, 0 while i < can_get and j < len(baoz): if zuidi[i] <= baoz[j]: i += 1 j += 1 zuiduo += 1 else: j += 1 print(zuiduo)
第三题,最抽象的题,美
需要你找到能组成mei的多少种方法,每个方法只能删掉一个字符
例如 meili,有3种方法,不变:meili, 删掉位置3 mei i,删掉位置4 meil
例如meei,有2种方法,前一个e和后一个e
我悟了
s = "meei" #meimei #meili ways = 0 for i in range(len(s)): y = s[0:i] + s[i+1:] if y.find("mei")!=-1: ways +=1 if s.find("mei")!=-1: ways +=1 print(ways)
第四题,找新朋友,然后输出期望值
例如输入组合 1,2 - 1,3,5 - 1,2,3,4
设他们3个为a,b,c, 我们需要2个进行组合,ab,bc,ac,
然后我们找最长且不重复的数有多少个,例如ab有1,2,3,5 = 4; ac有 1,2,3,4 =4; bc有 1,2,3,4,5 =5
4:2 5:1
4*(2/3) + 5(1/3) =4.3333333333333 7位
m_n = 3 a = set([1,2]) b= set([1,3,5]) c=set([1,2,3,4]) shuzu =[] sumnumber ={} shuzu.append(a) shuzu.append(b) shuzu.append(c) max = 0 i = 0 for i in range(len(shuzu)-1): e = i +1 while e < len(shuzu): n = len(shuzu[i]|shuzu[e]) if n in sumnumber: sumnumber[n]+=1 else: sumnumber.update({n:1}) max +=1 e+=1 total =0 for i in sumnumber: total += sumnumber[i]/max * i print(total)
第五题,耕牛题
给你一个n,一个要求k
给你一个列表,树的节点元素
然后n行2位,母节点,子节点
递归的去找所有子节点的和,多少个因子,输出大于k数量的公因子的统计数量
工程量很大,没时间做g了,最近都是在炼丹搞模型,没怎么去刷题orz;
#美团笔试#