首页 > 美团3.13算法笔试 Python
头像
DongaDong
编辑于 2021-03-14 15:57
+ 关注

美团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) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐