美团4.19运维笔试复盘

选择题

一共20道,大模型的题目大概有5道左右,其他的还有nginx,nmap,sql,Linux,基本上是考察会不会用他的命令。然后还有一些408,数据结构与算法这些的只是,比较少,我印象中有中缀转后缀、树、双绞线电缆、平均调度时间什么的。还有一点安全的,问数据加密后,攻击者是无法看到/无法复制/无法删除/看到一堆加密后的乱码,这个比较少。整体感觉大模型比较多,模型微调、预训练、transformer之类的。

编程题

一共3道。我自己一道都做不出来,写了一半就问AI去了,不知道会不会给我判作弊。美团可以用本地IDE,所以编程时可以无限次跳出,我跳出用我自己的IDE也是跳出,我问AI也是跳出,不知道这个的作弊是怎么判别的。

1矩形重叠面积

两个矩形,第一个边长a,b,第二个c,d。问两个矩形重叠的最大面积。

# 原理我不太懂,但是这个代码可以通过100%测试用例
import sys

a,b,c,d = map(int, input().split())
a, b = min(a, b), max(a, b)
c, d = min(c, d), max(c, d)
area1 = min(a, c) * min(b, d)
area2 = min(a, d) * min(b, c)
print(max(area1, area2))

2输出正序和逆序的个数

比如3,1,5.小美从最小的数1开始,一个一个找更大的数。第一个数x=1,i=1,第二个数x=3,i=0,第三个数x=5,i=2。第一个数到第二个数是逆序,第二个数到第三个数是正序。

示例:

输入:

2

3

1 2 3

3

3 2 1

输出:

2 0

0 2

# 这个代码是我自己的思路,让AI改了改的,可以过100%,虽然我自己不懂
import sys
import bisect

def solve():
    input = sys.stdin.read().split()
    ptr = 0
    T = int(input[ptr])
    ptr += 1
    for _ in range(T):
        n = int(input[ptr])
        ptr += 1
        nums = list(map(int, input[ptr:ptr + n]))
        ptr += n
        
        sorted_nums = sorted(nums)
        value_to_pos = {val: idx for idx, val in enumerate(sorted_nums)}
        loc = [value_to_pos[val] for val in nums]
        
        # 预处理每个值的所有出现位置
        pos_dict = {}
        for idx, val in enumerate(nums):
            if val not in pos_dict:
                pos_dict[val] = []
            pos_dict[val].append(idx)
        
        zheng = 0
        ni = 0
        
        for i in range(n):
            x = loc[i]
            if x < n - 1:
                next_val = sorted_nums[x + 1]
                if next_val in pos_dict:
                    # 使用二分查找检查是否有下一个值在当前值之后
                    positions = pos_dict[next_val]
                    # 找到第一个大于i的位置
                    j = bisect.bisect_right(positions, i)
                    if j < len(positions):
                        zheng += 1
                    else:
                        ni += 1
                else:
                    ni += 1
        
        print(zheng, ni)

solve()

 3输出YESorNO

对于一个字符串,小美想恰好进行一次交换,就能让字符串有序。给你字符串,判断行不行。

示例:

输入:

2

3

a c b

3

b c a

输出:

YES

NO

这个代码不一定对,因为我最后没试,我自己写在这里做一个记录,不要被我误导,特此声明。

import sys

def solve():
    input = sys.stdin.read().split('\n')
    ptr = 0
    t = int(input[ptr])
    ptr += 1
    for _ in range(t):
        n = int(input[ptr])
        ptr += 1
        s = input[ptr].strip()
        ptr += 1
        
        # 检查是否已经有序
        is_sorted = True
        for i in range(n-1):
            if s[i] > s[i+1]:
                is_sorted = False
                break
        if is_sorted:
            print("YES")
            continue
        
        # 检查是否有重复字符
        has_duplicate = len(set(s)) < n
        
        # 计算逆序对
        inversions = 0
        for i in range(n):
            for j in range(i+1, n):
                if s[i] > s[j]:
                    inversions += 1
                    if inversions > 1 and not has_duplicate:
                        break  # 提前终止
        
        # 判断条件
        if inversions == 1 or has_duplicate:
            print("YES")
        else:
            print("NO")

solve()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值