美文网首页
一道关于矩阵n*m的算法题

一道关于矩阵n*m的算法题

作者: isSunny | 来源:发表于2020-12-12 23:57 被阅读0次

今天翻笔记,看到了曾经面试爱奇艺的一道算法面试题,当时由于时间的关系并没有答出来,回家也没有认真思考过,今天看到了,索性就沉下心来写了一下,可能方法过去繁琐,如果有更好的答案,可以一起探讨哦!下面就和我一起来看一下这道面试题吧~~

题目:

将数组
[
      [1,4,7],
      [2,5,6],
      [3,8,9]
];      
变成
[
      [1,2,3],
      [4,5,8],
      [7,6,9]
];   

思路:

本道题乍一看有点蒙,是个二维数组,细看可以理解为我们上学时都学过的n * m矩阵,题的本意就是想把n * m矩阵变成m*n矩阵。

步骤:

1.首先先将二维数组转化为一维数组,结果如下:

【
    1,4,7,
    2,5,6,
    3,8,9
】;

2.然后很明显,我们要将上面的一维数组改成下面新数组的样子:

【
   1,2,3,
   4,5,8,
   7,6,9
】;

要想拿到上面的数组,我们思考一下,一共有N行,M列。
拿到数组的下标我们就可以获取到新的数组。要拿到的index为
0,3,6
1,4,7
2,5,8
从上面可以看出规律吧。。。直接上公式吧:
第一组:0+3X0 0+3X1 0+3X2
第二组:1+3X0 1+3X1 1+3X2
第三组:2+3X0 2+3X1 2+3X2
。。。。
第N组:(n-1)+n*(m-1);

由此可以看出用两个循环嵌套就可以咯。

3.最后再用方法将一维数组变成二维数组即可。

废话不多说,直接上代码吧:

  //n*m => m*n
        let arr = [
                   [1,4,7],
                   [2,5,6],
                   [3,8,9],
                   ];
        //flat方法
        function flaten(arr){
            let newArr = [];
            for(let i = 0;i<arr.length;i++){
                if(Array.isArray(arr[i])){
                    newArr = newArr.concat(flaten(arr[i]));
                }else{
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }


        //变成想要的数组  0+3*1  0+3*2 0+3*3 
        //1+3*1  1+3*2 1+3*3
        //2+3*1  2+3*2 2+3*3
        //......  n循环 套m循环 公式: (n-1)+n*(m-1)
       function getNewArr(arr){
            let A =[];
            let n = arr[0].length;
            let m = arr.length;
            for(let i=0;i<n;i++){
                for(let j=0;j<m;j++){
                    let b = i+n*j;
                    A.push(flaten(arr)[b]);
                }
            }
            return A;
       }

      //一维数组变多维数组
      function getFan(arr){
            let res = [];
            let n = arr[0].length;
            let m = arr.length;
            for (let i = 0; i < n; i++) {
                let temp = getNewArr(arr).splice(i*m, m);
                res.push(temp);
            }
            return res;
      } 
   
  
  console.log(getFan(arr));
//[
        //            [1,2,3],
        //            [4,5,8],
        //            [7,6,9],
        // ]

OK,太晚了,今天就到这里吧~

相关文章

  • 一道关于矩阵n*m的算法题

    今天翻笔记,看到了曾经面试爱奇艺的一道算法面试题,当时由于时间的关系并没有答出来,回家也没有认真思考过,今天看到了...

  • Codeforces 1365A - Matrix Game

    日常一道算法题。 翻译 Ashish 和 Vivek 在一个 n 行 m 列的矩阵上玩一个游戏,轮流认领格子。未被...

  • 算法问题-矩阵乘法,循环赛日程表,矩阵连乘

    题目一:Strassen矩阵乘法问题延伸 将n阶矩阵分块为m*m的矩阵,用m阶矩阵乘积需要计算个 矩阵的乘积 算法...

  • python算法题---搜索二维矩阵

    刷题顺序是按照LeetCode的算法面试题汇总进行的. 编写一个高效的算法来搜索 m x n 矩阵 matrix ...

  • 【深度学习-数学基础】矩阵和向量相乘结果

    矩阵和向量相乘结果 一个 m 行 n 列的矩阵和 n 行向量相乘,最后得到就是一个 m 行的向量。运算法则就是矩阵...

  • C语言 矩阵螺旋输出 解法

    C语言算法题 给定一个 m行、n列的矩阵,请按照顺时针螺旋的顺序输出矩阵中所有的元素(从[0][0]位置开始,具体...

  • 3D数学--矩阵与线性变换

    矩阵基础 n*m矩阵,就是n行,m列的矩阵 m*m矩阵,称为m阶方阵image.png 单元矩阵image.png...

  • 2021-08-03leetcode刷题

    题编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序...

  • 蓝杯二十九

    算法训练 关联矩阵 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 有一个n个结点m条边的有...

  • 第2章 矩阵

    矩阵 向量是标量的数组,矩阵是向量的数组。 n维向量 x (N*M的矩阵) = M维向量 矩阵就是映射。...

网友评论

      本文标题:一道关于矩阵n*m的算法题

      本文链接:https://www.haomeiwen.com/subject/uvfugktx.html