zoukankan      html  css  js  c++  java
  • 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] .

  • 相关阅读:
    计算机科学中最重要的32个算法
    趣事
    深度学习迷你地图
    物理学
    代数几何
    Node.js 文件系统
    Node.js 常用工具util包
    Node.js 全局对象
    favi.icon是什么?
    Node.js 路由
  • 原文地址:https://www.cnblogs.com/codepen2010/p/6812440.html
Copyright © 2011-2022 走看看