Return Largest Numbers in Arrays(算法)

题目

右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。

提示:你可以用for循环来迭代数组,并通过arr[i]的方式来访问数组的每个元素。

提示

Comparison Operators

思路

用  for() 循环遍历可得到大数组中的每一项小数组。 

解法一

看到“找到最大值”首先想到的当然是  sort() 方法。但  sort() 在排序时会调用数组每一项的 toString() 方法,比较的是字符串。要实现题目中比较数值的要求,我们可以给  sort() 传递一个降序排列的比较函数: 

//降序排列
function compare(v1,v2){ return v2 - v1; }

sort()

返回的是重排序后的数组,是对原数组进行修改,所以可以不必用新变量接收修改后的数组。 对重排序后的数组来说,因为是降序排列,所以每小组中的最大值就是第一项。

声明一个空数组,在循环体内把每个小数组的最大值推入,就是最后想要的返回结果啦!

解法二

对找小数组中最大值的遍历,有人提出了  sort() 的效率问题(感谢  @saymagic 的宝贵意见:blush: ),所以补充一下用  reduce() 做的更优解。 

redece() 是ES5增加的归并数组的方法之一,它会迭代数组所有项,并构建一个最终返回的值。 

保持原思路不变,把解法一中关于小数组排序的模块替换为以下代码:

var l = arr[i].reduce(function(prev,cur,index,array){ return prev > cur ? prev : cur; });

其中,  l 代表小数组中的最大值,在循环中将它推入新声明的空数组,就能得到想要的结果! 

解法

解法一
function largestOfFour(arr) {
  // You can do this! var temp = []; for (var i = 0; i < arr.length; i++){ arr[i].sort(function(v1,v2){ return v2 - v1; }); temp.push(arr[i][0]); } return temp; }
解法二
function largestOfFour(arr) {
  // You can do this! var temp = []; for(var i = 0; i < arr.length; i++){ var l = arr[i].reduce(function(prev,cur,index,array){ return prev > cur ? prev : cur; }); temp.push(l); } return temp; }

测试

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]) 应该返回一个数组 

largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]) 应该返回  [27,5,39,1001] . 

largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]) 应该返回  [9, 35, 97, 1000000] .

转载于:https://www.cnblogs.com/codepen2010/p/6812440.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值