美团8.6笔试思路和python题解

  1. ab两种点心,每个礼盒放3个点心,a、b至少各有一个,求最多能包多少个礼盒

签到题直接print就行,输出a、b、(a+b)//3的最小值

  1. 给一组0,-1,1数组,分割点k左大于等于0、右侧小于等于0的为异常数据,求最乐观情况下有多少个异常数据
    类似接雨水问题,设定两个n+1的数组,分别代表k左侧和右侧异常数据个数,初始化为0,对原数组进行遍历,最后取left[i]+right[i]的最小值即可。
    时间复杂度o(n),空间复杂度o(n)

    n = int(input())
    nums = [int(i) for i in input().split()]
    left = [0]*(n+1)
    right = [0]*(n+1)
    cur = 0
    for i in range(1, n+1):
     if nums[i-1] >= 0:
         cur += 1
     left[i] = cur
    cur = 0
    for i in range(0, n):
     if nums[n-i-1] <= 0:
         cur += 1
     right[n - i - 1] = cur
    ans = n
    for i in range(n):
     ans = min(ans, left[i] + right[i])
    # print(left, right)
    print(ans)
  2. 给定两个代表正面和反面的数组,目标是通过反转将至少一半相同数字的面朝上,初始状态为全部朝上,求最少需要翻转多少次,无法达到目标输出-1
    (1) 记录一个字典,key是数字,value是一个数组,对应数字的index,如果在反面数组中,取负
    (2) 对该字典进行遍历,找出value的长度大于n/2,并且用绝对值+set排除正反都在value里的情况
    (3) 因为要翻到正面,所以记录max(0, math.ceil(n/2)-正数的数量)即可

    import math
    n = int(input())
    pos = [int(i) for i in input().split()]
    neg = [int(i) for i in input().split()]
    dic = {}
    for i in range(n):
     if pos[i] in dic:
         dic[pos[i]].add(i)
     else:
         dic[pos[i]] = {i}
     if neg[i] in dic:
         dic[neg[i]].add(-i)
     else:
         dic[neg[i]] = {-i}
    def rev(stone_set, n):
     count = 0
     for item in stone_set:
         if item > 0:
             count += 1
     return max(0, math.ceil(n/2)-count)
    flag = False
    ans = n
    # print(dic)
    for key, value in dic.items():
     tmp_list = [abs(i) for i in list(value)]
     tmp_set = set(tmp_list)
     if len(tmp_set) >= n/2:
         flag = True
         ans = min(ans, rev(value, n))
    if flag:
     print(ans)
    else:
     print(-1)
  3. n个样本,k个类,每类假设m个样本,按照输入顺序,取m/2为训练集,剩下的为测试集。按照样本编号升序输出所有训练集样本及训练集样本

(1) 记录一个字典,key是类别,value是index数组
(2) 遍历字典,分别将每个index数组小于math.ceil(len(value)/2)的加入训练集,大于的加入测试集
(3) 训练集测试集排序输出

import math
n, k = [int(i) for i in input().split()]
classes = [int(i) for i in input().split()]
dic = {}
for i in range(n):
    if classes[i] in dic:
        dic[classes[i]].append(i)
    else:
        dic[classes[i]] = [i]
train = []
test = []
for key, value in dic.items():
    value = sorted(value)
    for i in range(len(value)):
        if i < math.ceil(len(value)/2):
            train.append(value[i]+1)
        else:
            test.append(value[i]+1)
train = sorted(train)
test = sorted(test)
for i in range(len(train)):
    if i != len(train)-1:
        print(train[i], end=' ')
    else:
        print(train[i])
for i in range(len(test)):
    if i != len(test)-1:
        print(test[i], end=' ')
    else:
        print(test[i])
#美团笔试#
全部评论
大佬约面了吗?
点赞 回复 分享
发布于 2022-08-09 17:11
理想汽车2023提前批校招目前已开启,有打算找工作的师弟师妹们,可以通过以下链接内推投递,全程进度跟随,无笔试。 https://www.nowcoder.com/discuss/1008400
点赞 回复 分享
发布于 2022-08-09 16:28
有第五题思路吗
点赞 回复 分享
发布于 2022-08-09 15:44

相关推荐

一共一个小时,面试难度以及自己的回答算是最近的面试压力比较大的,实习问了30分钟,中间穿插八股。1.redis数据结构2.redis持久化机制3.mysql索引底层4.聚簇索引与非聚簇索引5.索引优化6.索引失效7.mysql执行一条sql8.那么多索引mysql怎么选(不会)9.tcp与udp区别10.tcp为什么可靠11.消息队列作用12.kafka怎么保证消息有序性13.mcp是什么?14.skills是什么?15.jvm内存分配与回收过程(我讲了从创建对象到判断垃圾对象到垃圾回收我全说了一遍,是这个吗?)16.fullgc触发机制17.tcp的拥塞控制流程(不会了)18.分布式事务解决方案,说了2pc,3pc,tcc。算法是反转双向链表,没有按格式输出,但是面试官没让继续写了,面完以为挂了,结果晚上秒过,看看复试什么情况吧。今天百度打电话准备发offer了,业务跟在手子的差不多,很垂,并且说不分日常暑期,只看表现,会有转正机会,但是考虑再三还是拒绝了,百度实习薪资确实有点低,title也不如之前了,但是面试的二位业务老师我很喜欢,对我的评价也不错,希望之后能有机会共事。从三月份到现在一共面了六家,面试次数总共是8场,情况如下:脉脉二面(无答复,默认挂)百度二面已oc美团一面过,下周一二面shein一面过直接HR面游族一面过直接HR面腾讯一面过等待约二面滴滴明天一面面试通过率还是蛮高的,但是大部分都是日常,感觉对我现在的加成不大,大概率不会去,不知道暑期会是什么情况呢唉,希望能有面试吧,继续加油。字节被无hc直接取消了,现在还没人捞,有没有字节HR救救我
不管什么都不想跳动了:本人美团百度快手都待过,建议肯定是直接留快手多一点产出后转正or直接冲字节腾讯暑期吧。一是快手从福利到基建都吊打另外两家。美团现在这个业务比较惨,本来毛利就很低,亏损严重,今年很可能要优化人力降低成本,去了别说日常,就算暑期后面都很可能被优化。百度其实实习生权限挺高的,可以接触到一些含金量高的项目,但是现在的风评不如之前了,薪资也不高。二是转正概率和薪资是跟产出挂钩的,你都在手子已经积累产出了,去其他家日常实习产出都是从0开始,肯定不可能有你在手子转正可能性大啊,现在日常压根没必要去,而且我有两个师弟都是在快手日常转正的,不用太担心,安心留在手子一边多做一点产出然后一边冲字节腾讯暑期,字节腾讯今年实习岗位非常多的,不如好好把握这个,加油。
查看18道真题和解析
点赞 评论 收藏
分享
评论
1
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务