作为一个新手小白,参加了美团笔试,第一次笔试有很多地方不懂,做出三道题,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) 回帖