美团3.13算法笔试 Python
作为一个新手小白,参加了美团笔试,第一次笔试有很多地方不懂,做出三道题,1,3两题只过了18%,于是很有疑问,特地放出代码,想寻求大佬指点。
第一题 矩阵转置
输入:第一行输入 n m 代表行数和列数
后面紧跟n行数字 每行有m个数字,代表这一行的数
输出:这个矩阵的转置
例如
输入:
3 3
1 2 3
4 5 6
7 8 9
输出:
1 4 7
2 5 8
3 6 9
因为平时用numpy比较多,这里我就直接把numpy导入了,不知道是不是这里的问题,这里放上代码
import numpy as np
# 矩阵转置
if __name__ == '__main__':
n, m = map(int, input().split(' '))
matrix_a = []
for i in range(n):
row_list = input().split(' ')
for j in range(len(row_list)):
row_list[j] = int(row_list[j])
matrix_a.append(row_list)
matrix_a = np.array(matrix_a)
matrix_a = matrix_a.T
for p in range(m):
for q in range(n):
print(matrix_a[p,q],end=' ')
print()
第三题 滑动窗口取众数
给一个数组,规定一个滑动窗口,每次取滑动窗口里的众数输出,如果有多个众数选择最小的数字输出
def find_num(list):
memory = []
value = []
for i in range(len(list)):
if list[i] not in memory:
memory.append(list[i])
value.append(1)
elif list[i] in memory:
value_index = memory.index(list[i])
value[value_index] += 1
if len(set(value)) == len(value): # 说明众数没有重复元素
max_index = value.index(max(value))
max_num = memory[max_index]
else: # 说明众数中有重复元素
max_time = max(value)
index_list = []
for g in range(len(value)):
if value[g] == max_time:
index_list.append(g)
candidate_list = [memory[r] for r in index_list]
max_num = min(candidate_list)
return max_num
if __name__ == '__main__':
n, k = map(int, input().split(' '))
all_num_list = input().split(' ')
for i in range(len(all_num_list)):
all_num_list[i] = int(all_num_list[i])
# 开始滑窗
result = []
for i in range(0, n-k+1):
final_num = find_num(all_num_list[i:i+k])
result.append(final_num)
for n in result:
print(n)

查看3道真题和解析