8.8美团笔试算法题

4道编程80分,3道多选20分,感觉凉凉,过来分享一下编程做法:

1、一组数据有n个数字,每个数字范围在[1,n],输入一个整数k,找出一个数x使得有且仅有k个数字小于x

有幸100%
import sys
if __name__ == "__main__" :
    # n组数据
    n_data = int(sys.stdin.readline())
    for _ in range(n_data):
        
                # 获取n,k
        n_k = sys.stdin.readline()
        nk = list(map(int,n_k.split()))
        n , k = nk[0] , nk[1]

        # 获取n个数
        line = sys.stdin.readline()
        L = list(map(int,line.split()))

        # 对数据进行重排列
        L.sort()

        # 看是否能在k处插入值
        # 观察k是否越界
        if k > n or k < 0: print("False")

        # 观察k是否到尽头
        elif k == n : 
            if L[n-1] < n :
                print("True",'
',L[n-1]+1)
            else:
                print("False")

        # 观察k是否在开头
        elif k == 0 :
            print("True",'
',1)

        # 若k在中间
        elif L[k-1] < L[k] : 
            print("True",'
',L[k-1]+1)
        else :
            print("False")        

2、奇怪的键盘,去除输入数组中的空格和相邻重复字母

有幸100%通过,也就这两题了,后面一道比一道凉😭😭
import sys
if __name__ == "__main__" :
    line = sys.stdin.readline().strip()
    L = line.split()

    # 去掉空格后重新排布成字符串
    tran = ''.join(L)

    # 初始化存放答案的数组和上一个碰到的字符,"#"表示空
    ans , last = [] , '#'

    # 遍历重排后的字符串,若和上一个碰到的相同,则跳过,不同则加入到答案
    for ch in tran:
        if ch == last : continue
        else : 
            ans.append(ch)
            last = ch
    print(''.join(ans))

3、输入一个数组,设p[i]为数组第i个数字A[i]前最大且小于A[i]的数,若不存在,则p[i]为0,求

这个题目的通过了只有62%,我相信写得没错,猜测是因为有些数组太长导致超时了,虽然我只用一个循环,但可能重排列表太多次导致超时了???🤔🤔
import sys
if __name__ == "__main__" :
    n = int(sys.stdin.readline())
    line = sys.stdin.readline()
    nums = list( map(int,line.split()) )
    
    # 用一个列表存放出现过的数字,初始化输出
    appear , ans = [nums[0]] , 0
    for i in range(1,len(nums)) :
        
        # 如果该数字没出现,则按顺序插入到appear中
        if nums[i] not in appear:
            appear.append(nums[i])
            appear.sort()
        
        # 该数字插入后的前一个数即为符合条件的数
        point = appear.index(nums[i])
        if point > 0 : 
            ans += appear[point-1] * (i+1)
    print(ans)

4、两个数组,同位置上的数都不相等,可以进行的操作:把两个数组中同样的数字全部换成另一个数字,问最少重复多少次可以把这两个数组变成一样

消消乐题目,我暂时没有完全正确的思路,通过率只有30%不到。


#美团笔试##笔经##笔试题型#
全部评论
学习了
点赞
送花
回复
分享
发布于 2021-08-08 21:20
第三题python要A的话我不知道有没有C++的 set lower bound类似函数。我是维护的一个新数组,把当前数左边所有数都放进去,升序排列。
点赞
送花
回复
分享
发布于 2021-08-08 23:31
滴滴
校招火热招聘中
官网直投
学习了 第三题愣是看了好久才明白。。。 再看自己的全是bug好气
点赞
送花
回复
分享
发布于 2021-08-12 07:29
请问测试和后端开发题目一样吗
点赞
送花
回复
分享
发布于 2021-08-12 11:32
第一题,k在中间时为什么不是小于等于的判断条件?
点赞
送花
回复
分享
发布于 2021-08-15 15:47

相关推荐

头像
04-20 15:34
已编辑
长安大学 电子信息类
4/6笔试,4/15一面,4/18二面,4/19上午电话问到岗时间,实习时长,下午offer鼠鼠投软开,笔试完软开挂,被测开捞了,从牛客上看了一大堆测开的面经,运气不错,过了。现在回馈一下社区,感谢家人们。一面&nbsp;50min:说一下&nbsp;c++都有哪些基础数据类型?你之前的实习最大的收获是什么有使用过&nbsp;uint&nbsp;吗?进度的调度算法?udp&nbsp;和&nbsp;tcp&nbsp;的区别tcp&nbsp;三次握手?能不能两次?现在就咱们进行视频面试,我给你发了一个链接,就咱们两个可以用,能说一下这个底层协议么,或者实现机制么cpp&nbsp;的内存分配?cpp&nbsp;的析构函数是干什么的查看日志文件的前一百行用的是什么命令?查看一个项目的进程的&nbsp;id&nbsp;用什么命令?ps&nbsp;-aux&nbsp;,&nbsp;aux&nbsp;是干什么的?没有析构函数会有什么好处大数据方面了解那些东西说一下你对&nbsp;mysql&nbsp;的理解你对侧开这个岗位的理解写一道反转链表问了一下,以后工作城市的打算反问刚才面试中有什么值得改进的吗二面&nbsp;50min自我介绍说一说你熟悉的一个项目&nbsp;(mit081)你是从什么&nbsp;level&nbsp;实现的操作系统吗能介绍一下虚拟内存这个机制吗虚拟内存有没有大小的限制有没有什么限制虚拟内存大小的一个因素虚拟内存能讲一下这个分配吗?怎么分配到?涉及到那些数据结构?怎么个流程?能详细描述一下用户态页表吗?谁管理的?怎么存的?这个用户态的页表是谁来创建的?这个用户态的页表的作用是什么呢一般的操作系统会维护一个用户态的页表吗?这个页表里面一般都有什么信息?你能介绍一下&nbsp;linux&nbsp;的寻址方式吗能把页表结构再说清楚一点吗?网络那边你有什么实践能说一下吗&nbsp;(io&nbsp;多路复用)访问一个&nbsp;url,整个数据包的交换?网络传递中,会用到&nbsp;mac&nbsp;地址吗?还是仅在目的子网中会用到看一个进程是不是存活?查看一个进程打开了什么端口lsof&nbsp;是查看端口吗?lsof&nbsp;主要是干什么的?如果发现系统变慢,linux&nbsp;那会怎么考虑怎么排查这个问题?生活中有什么遇到一些挑战,你有类似突破舒适区的事情吗平时做项目的话,会有和他人有合作吗如果遇到不太配合的伙伴的,同事之类的情况?翻转链表反问&nbsp;base&nbsp;在哪里?反问面试表现base&nbsp;成都,有没有6.3到岗的,合租滴滴。#面经##测开##美团##合租#
点赞 评论 收藏
转发
6 29 评论
分享
牛客网
牛客企业服务