小米历年秋招笔试真题

如需获取完整资料,请点击下方链接领取《2024校招笔试真题秘籍》(实时更新中)

不收费,3人组团即可一块免费领取!限量免费10000个名额

手机端点击免费领取:https://www.nowcoder.com/link/campus_xzbs2

电脑端请扫码领取:

1、矩阵相乘

【题目描述】

实现矩阵相乘函数void matrix_multiply(int* A, int* B, int* C, int M, int K, int N)

暂不考虑整型溢出,请尽可能优化运行速度。

参数说明:0 < M,K,N < 1000

C[M][N] = A[M][K] * B[K][N]

输入描述:

输入矩阵A和矩阵B的值:

M=2, K=3,N=2

A[2][3]={{1,2,3},{1,2,3}}

B[3][2]={{1,1},{1,1},{1,1}}

输出描述:

输出矩阵C的值:

C[2][2]={{6,6},{6,6}}

输入样例:

2 3 2

1 2 3

1 2 3

1 1

1 1

1 1

输出样例:

6 6

6 6

【解题思路】

三层循环实现矩阵相乘操作即可。

 

【参考代码】

#include <stdio.h> 
#include <stdlib.h> 
#include <assert.h> 
#include <sys/time.h>
void matrix_multiply(int *A, int *B, int *C, int M, int K, int N) {
    int i = 0;
    int j = 0;
    int k = 0;
    for (i = 0; i < M; i++) {
        for (j = 0; j < N; j++) {
            int sum = 0;
            for (k = 0; k < K; k++) {
                sum += A[i * K + k] * B[k * N + j];
            }
            C[i * N + j] = sum;
        }
    }
}
void matrix_multiply_opt(int *A, int *B, int *C, int M, int K, int N) {
    int i = 0;
    int j = 0;
    int k = 0;
    for (k = 0; k < K; k++) {
        for (i = 0; i < M; i++) {
            int r = A[i * K + k];
            for (j = 0; j < N; j++) {
                C[i * N + j] += r * B[k * N + j];
            }
        }
    }
}
int main(int argc, char **argv) {
    int M, N, K;
    scanf("%d%d%d", &M, &K,
          &N); // printf("%d %d %d\n", M, N, K); assert(M>0 && M<=1000);
               // assert(N>0 && N<=1000); assert(K>0 && K<=1000);
    int *A = (int *)malloc(M * K * sizeof(int));
    int *B = (int *)malloc(K * N * sizeof(int));
    int *C = (int *)malloc(M * N * sizeof(int));
    int i = 0;
    while (i < M * K) {
        scanf("%d", &A[i]); // printf("%d ", A[i]); // if ((i+1)%K==0) { //
                            // printf("\n"); // } i++;
    }
    i = 0;
    while (i < K * N) {
        scanf("%d", &B[i]); // printf("%d ", B[i]); // if ((i+1)%N==0) { //
                            // printf("\n"); // } i++;
    }
    matrix_multiply_opt((int *)A, (int *)B, (int *)C, M, K, N);
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            printf("%d ", C[i * N + j]);
        }
        printf("\n");
    }
}

2、单词搜索

【题目描述】

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格,同一个单元格内的字母不允许被重复使用。

二维网格为:

[

  ['A','B','C','E'],

  ['S','F','C','S'],

  ['A','D','E','E']

]

输入描述:

需要查询的单词

输出描述:

true 代表单词存在,false表示不存在

输入样例:

SEE

输出样例:

true

【解题思路】

从搜索单词的第一个字母出发,从矩阵中匹配然后开始进行dfs搜索只到完全匹配为止。

 

【参考代码】

import java.util.Sca

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024软件笔试真题+答案合集 文章被收录于专栏

本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题,内容中包含多个名企的笔试真题,附有题目思路及参考代码

全部评论

相关推荐

这个阶段可能是最痛苦的时候,可能和你竞争同一个实习岗位的是已经有相关实习经验的同学或者专业更对口的同学,所以你能做到的是让自己的简历更贴近jd需要、海投和面试技能up。◉总结下来,逃离0实习的命运,按照优先级分为三部分。1.改简历2.持续的在不同渠道投简历、准备面试、面试复盘、调整心态再投递简历3.同步补充所需知识(书籍、课程、知识分享、面经...)[种草R]那么问题来了,这种无实习的“死循环”,怎样才能通过改简历逃脱?[种草R]答案是,你可以通过解决简历上的硬伤,通过一部分公司的初筛。但也有一定局限性,剩下的要看亿点点幸运以及自身的硬实力(也就是短时间无法快速达到的门槛)。◉你的初版简历要满足&nbsp;/可读性+可挖性/⦿可读性:展现力+简洁性。简历简历,简单的展示经历,一眼看下去能看到重点就可,不要花里胡哨,减少口语化叙述。⦿可挖性:这个涉及到你所列举项目的内容,按照逻辑进行拆分(这个逻辑适用所有领域简历项目),所谓star法则,实际是目标、方法、结果的“故事性”表达。0实习的同学改简历流程大概是:1.评估学校科研与其他实践中,最能体现自己能力的项目,如论文研究、创新项目、社团干部之类。2.按照重要级选取5个以内项目,按照上述“可挖性”来进行项目拆分与叙述(早期版本可用叙述性语言,再改版要凝练)3.根据你的目标岗位jd选取更合适的项目放在简历上(3个左右)4.调整排版、措辞◉你的面试表现要体现&nbsp;/积极性+可塑性/⦿积极性:不要一问三不知,不要紧张到支支吾吾,不要玻璃心,要对你想尝试的实习抱有好奇心和探索欲。⦿可塑性:面试聊天就是以mvp方式了解到这位同学的综合能力,包括学习能力、思考能力、迁移能力等,来决定是否留用,培养是需要成本的。面试具体的表现可以下次开新帖详聊~最后附了我去年0实习上岸简历的模式,我准备了产品和运营两份,不同的简历选择的项目侧重点也不同,改好简历后投递,在10d内找到相对比较想去的第一段实习,于是乎就开始了实习之路~ #牛客创作赏金赛#&nbsp;&nbsp;
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务