选择题
一共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()