美团8.8笔试求解

第一题 找数 36%
T = int(input())
for _ in range(T):
    n, k = map(int, input().split())
    num = list(map(int,input().split()))
    num.sort()
    if n==k:
        if num[n-1]+1 <= n:
            print(num[n-1]+1)
        else:
            print('NO')
    else:
        # 主要报错部分
        if num[k-1]+1 >= 1 and num[k-1]+1 <= n and num[k-1]+1 <= num[k]:
            print('YES')
            print(num[k-1]+1)
        else:
            print('NO')
第二题 奇怪键盘 100% 
a = str(input())
ans1 = []
ans = []
# 删除空格
for i in range(len(a)):
    if a[i] != ' ':
        ans1.append(a[i])
# 删除重复元素
for j in range(len(ans1)):
    if j==0:
        ans.append(ans1[0])
    elif ans1[j] != ans1[j-1]:
        ans.append(ans1[j])
# 列表转化为字符串
out = ''.join(b for b in ans)
print(out)
第三题 序列prev题 64%
n = int(input())
num = list(map(int, input().split()))
prev = [0] * n
sum = 0
for i in range(1,n):
    num1 = num[0:i]
    num1.sort()
    for j in range(len(num1)):
        if num1[len(num1)-1-j] < num[i]:
            prev[i] = num1[len(num1)-1-j]
            break
    sum += (i+1)*prev[i]
print(sum)
第四题 漂亮序列左右一半相同 18% 
n = int(input())
num = list(map(int, input().split()))
ans = 0
L = []
for i in range(n//2):
    if num[i] != num[i+n//2] and num[i] not in L:
        ans += 1
        L.append(num[i])
print(ans)
#美团笔试##美团##笔经#
全部评论
第一题思路差不多,但是我在n==k的时候直接输出NO了,你这个在n==k时判定YES情况下第一行没输出YES
1 回复 分享
发布于 2021-08-08 16:48
第三题,不需要每次都重新排序,循环的时候用二分法将X[i]插入到已经排序好的前i-1个数中就行了,复杂度是O(nlogn)
1 回复 分享
发布于 2021-08-08 17:03
报错是因为k=0下标越界了,k=0的时候直接输出YES和1就行了。另外你n==k的时候没输出yes
点赞 回复 分享
发布于 2021-08-08 17:00
为啥第一题我用sort命令不好使呀  好奇怪 我哭了
点赞 回复 分享
发布于 2021-08-10 11:12

相关推荐

联通 技术人员 总包不低于12
点赞 评论 收藏
分享
10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
1 10 评论
分享
牛客网
牛客企业服务