JAVA小米集团-2021校招-算法方向在线考试(矩阵相乘+盒子包裹问题)

Posted 爱做梦的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA小米集团-2021校招-算法方向在线考试(矩阵相乘+盒子包裹问题)相关的知识,希望对你有一定的参考价值。

前言

楼主参加笔试之前去字节面试了,又是被虐的一次,所以笔试迟到40分钟,而且被字节虐的脑子转不动了,今天笔试很简单,但是我做得不是很理想,希望大家多多说一下自己的思路。祝大家都有心仪的offer。

一、矩阵相乘(A0.88,超时了)

时间限制: 3000MS
内存限制: 589824KB
题目描述:
实现矩阵相乘函数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

代码


import java.util.Scanner;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: 
 * @Email: 
 * @Date: 2020/9/8
 * @Time: 18:51
 * @Version: 1.0
 * @Description: Description
 */
public class First 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt();
        int K = sc.nextInt();
        int N = sc.nextInt();
        int[][] matrix1 = new int[M][K];
        int[][] matrix2 = new int[K][N];
        for (int i = 0; i < M; i++)
            for (int j = 0; j < K; j++)
                matrix1[i][j] = sc.nextInt();
        for (int i = 0; i < K; i++)
            for (int j = 0; j < N; j++)
                matrix2[i][j] = sc.nextInt();
        for (int i = 0; i < M; i++) 
            for (int k = 0; k < N; k++) 
                int temp = 0;
                for (int j = 0; j < K; j++) 
                    temp += matrix1[i][j] * matrix2[j][k];
                
                System.out.print(temp + " ");
            
            System.out.println();
        
        sc.close();
    


二、盒子包裹问题(A50%,就是考虑最简单的情况,没有考虑 2 2 4 4 5这种(这个输出为2))

时间限制: 3000MS
内存限制: 786432KB

题目描述:
假设,小米商城有卖空盒子,各种大小的正方形空盒子。对于i (1<=i<=n),ai是正方形盒子的边长。

如果有顾客采购多个空盒子,快递打包的时候可以将它们嵌套打包以节约成本。

如果满足以下三个条件,盒子i可以放到j中:

1,盒子i没有放在另一个盒子里

2,盒子j不包含任何其它盒子

3,ai<aj

现在有顾客采购了n个空盒子。工作人员想知道,如何装箱,能使得包裹数量最少。

输入描述
第一行包含一个整数n(1<=n<=5000) 顾客购买箱子的数量。
第二行包含了n个整数, a1, a2 … an(1<=ai<=109) , ai是盒子的边长。

输出描述
打印包裹的最小数量。

样例输入
4
4 2 4 3

样例输出
2

提示
在这个示例中,可以将盒子2放入盒子3中,将盒子4 放入盒子1中。

代码:

package xiaomi;

import java.util.Arrays;
import java.util.Scanner;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: 
 * @Email: 
 * @Date: 2020/9/8
 * @Time: 19:15
 * @Version: 1.0
 * @Description: Description
 */


public class Second2 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) 
            arr[i] = sc.nextInt();
        
        Arrays.sort(arr);
//        System.out.println(Arrays.toString(arr));
        int count = 1;
        /*int i=0,j=n/2;
        while (i<n/2&&j<n)
            if (arr[i]<arr[j])
                i++;j++;count++;
            
        */
        for (int i = 1; i < n-1; i++) 
            int p = arr[i], q = arr[i - 1],k=arr[i+1];
            if (p == q && p==k) 
                count++;
            
        
        System.out.println(count);
    


以上是关于JAVA小米集团-2021校招-算法方向在线考试(矩阵相乘+盒子包裹问题)的主要内容,如果未能解决你的问题,请参考以下文章

58集团2017校招笔试-前端岗

JAVA滴滴-2021校招在线笔试-DE数据开发试卷-0913

JAVA滴滴-2021校招在线笔试-DE数据开发试卷-0913

一次幸运的校招小米Java后台offer

奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)

校招总结旧文回顾百度实习收获美团网易小米华为远景offer