二维数组求平均数(每行/每列)
来源:互联网 发布:免费视频聊天的软件 编辑:程序博客网 时间:2024/06/04 18:30
最近在学习《数据结构与算法javascript描述》,发现里面有个二维数组求平均数的那个地方好像有一点问题,可能是我看的是盗版PDF吧,在求每一行【平均数的时候没考虑到数组元素有为0的情况,在求每一列平均数的时候代码就是错误的,所以我自己尝试重新实现一次;
求二维数组每行平均数:
每行求平均数我们只需要注意有0存在的情况即可;
var grades = [[1,2],[3,0,4],[5,6,7]]; var grades1=[0,1,2,3,4,5];/* [1,2] [3,0,4] [5,6,7] */ /* 求二维数组每行平均数函数*/function averagePerRow(arr){ var average = 0; var len=arr.length; var divisor=len; var tmpArray=new Array(); for(var i=0;i<len;i++) { tmpArray.push(calPerRow(arr[i],arr[i].length)) } return tmpArray;} /* 求一维数组平均数函数 */function calPerRow(arrRow,arrRowLen) { var divisor=arrRowLen||arrRow.length; var totalRow=0; for(var i=0;i<divisor;i++) { totalRow+=arrRow[i]; } for(var j=0;j<divisor;j++) { if(arrRow[j]==0) { divisor-=1; } } return totalRow/divisor; } console.log(averagePerRow(grades)) console.log(calPerRow(grades1))
求二维数组每列平均数:
这个必须好好说一下,在实现的时候卡克了很久;关键点在于长度不一样的数组如何去求每列的和;
我的想法是把行列进行置换,然后再用求每行平均数的方法去求;
但是行列置换又是一个难点,关键还是在于每个数组的长度不一样(列数),我想的思路是求出二维数组中最大的那个数组的长度,然后让其他数组长度都为这个(不够的赋值0),然后进行行列置换;可以看成M*N的矩阵;
But!! 有一个大佬的思路是下面的,比我更简洁,而且代码量极少!~而且全部用ES6的语法写出来的,╮(╯▽╰)╭ 大牛就是大牛,然后仔细读了他的代码,当然借助了这个网站,在线将ES6转换为ES5;
https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=es2015%2Creact%2Cstage-2&targets=&browsers=&builtIns=false&debug=false&code_lz=Q
下面就是大牛的代码,实现的功能是把数组进行行列置换;
var arr = [ [1, 2, 6,11,16], [3, 0, 4], [5, 6, 7,12], [8, 9, 10] ] var result = Array(Math.max(...arr.map(e =>e.length))) .fill("") .map((_e, outerIndex) => arr.map((e, innerIndex) => e[outerIndex]) .filter(ele => ele !== undefined));//不知道大家看懂他的代码没,下面我就按照自己的理解解释一下;//思路: /*目标 [1, 2, 6,11,16], [1,3,5,8] [3, 0, 4], [2,0,6,9] [5, 6, 7,12], ==> [6,4,7,10] [8, 9, 10] [11,12] [16] (1)生成需要输出的数组 ["","","","",""] (2)生成M*N “矩阵” [1,3,5,8] [2,0,6,9] [2,0,6,9] [6,4,7,10] [11,undefined,12,undefined] [16,undefined,undefined,undefined] (3) 去除"undefined" [1,3,5,8] [2,0,6,9] [2,0,6,9] [6,4,7,10] [11,12] [16] (4)将最后结果填入刚生成的数组 [ [1,3,5,8], [2,0,6,9], [2,0,6,9], [6,4,7,10], [11,12], [16], ] */
我自己又仿照他的思路用ES5的语法又实现了一遍,最终可以把每列的平均数求出来~
var arr = [ [1, 2, 6,11,16], [3, 0, 4], [5, 6, 7,12], [8, 9, 10] ] function getSum(total, num) { return total + Math.round(num); } function averageColRow(arr){var Max=0;arr.map(function(item){ Max=Math.max(Max,item.length);})var result=Array(Max).fill("") .map(function(_e,outerIndex){return arr.map(function(e,innerIndex,input){return e[outerIndex]}).filter(function(ele){return ele!==undefined})});var permutationArray=result.map(function(item){{ return item.filter(function(ele){ return ele!=0; }) } }) return permutationArray.map(function(item){ return item.reduce(getSum,0)/item.length;})} console.log(averageColRow(arr));
阅读全文
0 0
- 二维数组求平均数(每行/每列)
- 二维数组中查找数据(该数组每行从左至右递增,每列从上至下递增)
- c++二维指针求每行每列次大值
- 求一个二维数组每列的最小值
- 求一个二维数组中每列的最小值
- 在每行、每列递增的二维数组中找出给定的target 的位置
- 一个H行L列的二维矩阵数组(整形),求每行元素总和,并将每行总和排序输出
- 求二维数组每行元素之和
- 求二维数组每列中最大元素,并依次放入一位数组中
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- 数组法求平均数
- 求3行5列二维数组中每列最小值,及最小值在数组中的行号和列号,并输出。
- 求每行每列都有序的一个矩阵的第k大的值
- uva11082 知道矩阵每行每列数字之和 求矩阵每一个元素 最大流
- 求出二维数组每列中最小元素
- 有一个二维数组杨氏矩阵,数组的每行从左到右是递增的,每列从上到下是递增的,在这样的数组中查找一个数字是否存在
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- oracle帮助文档——PL/SQL Packages and Types Reference
- 导入mongo数据
- Web攻防之XSS,CSRF,SQL注入
- ObjectiveC 二维码生成算法
- 'latin-1' codec can't encode characters in position 62-66: ordinal not in range(256)
- 二维数组求平均数(每行/每列)
- 订单号字符串组装
- Vuforia的Samples详细解析(Android)
- PythonWeb 开发Django框架(一) 环境搭建
- oracle帮助文档——Oracle Database Security Guide
- 自己实现atoi
- Android的activity启动模式官方中文版
- C++学习笔记四之使用new来创建动态数组
- IDEA 在同一目录创建多个项目