【问题标题】:Algorithm to find smallest array from a list of n arrays [closed]从n个数组列表中找到最小数组的算法[关闭]
【发布时间】:2014-11-28 14:10:42
【问题描述】:

我需要从 JavaScript 中的 n 数组列表中找出最小的数组。最好的算法是什么?

var a = [1, 3, 2, 5, 3, 7, 3, 5, 9, 0],
    b = [2, 4, 7, 5, 1, 2, 8],
    c = [5, 3, 7, 6];

function doSomething() {
  // arguments
}

这里的结果应该是c。那是[5, 3, 7, 6]

注意:数组的数量没有定义,使用fn.call传递给函数的数组可能有10s或100s

【问题讨论】:

  • “最小”是什么意思?最小元素数还是最小元素总和?
  • 数组有一个.length 属性。
  • @Larabone - 你很幸运你偷偷通过了这个家庭作业问题,通常他们被发现了,你不会得到一个完整的答案。下一次,做你自己的作业,通过让随机的人从互联网上为你做作业,你什么也学不到。我删除了我的答案。我希望其他人也这样做。
  • @Larabone - 我会告诉你什么,给我你老师的电子邮件地址,我会问他们是否高兴我为你做(甚至开始)你的家庭作业,如果他们同意我重新恢复我的答案。我不认为他们会。做自己的功课。
  • 这个问题是家庭作业,OP没有努力解决它。

标签: javascript arrays algorithm


【解决方案1】:

这个问题可以通过下面的实现来解决。

function doSomething(){
    var Result = a;
    if ( b.length < Result.length )
        Result = b;
    if ( c.length < Result.length )
        Result = c;
    return Result;
}

【讨论】:

    【解决方案2】:
    var arrays = [
        [1, 3, 2, 5, 3, 7, 3, 5, 9, 0],
        [2, 4, 7, 5, 1, 2, 8],
        [5, 3, 7, 6],
    ]
    
    function smallestArray(arrays) {
      var min = Number.POSITIVE_INFINITY;
      var smallest;
    
      for(var l = arrays.length-1; l >= 0; l--) {
        var length = arrays[l].length;
        if (length < min) {
          min = length;
          smallest = arrays[l];
        }
      }
    
      return smallest;
    }
    
    smallestArray(arrays)
    

    【讨论】:

      【解决方案3】:
      // Put them in an array
      var arr = [a,b,c];
      // Sort it
      arr.sort(function (list1,list2){
          // compare lists by lengths
          return list1.length - list2.length;
      });
      // take the first one.
      var shortest = arr[0];
      

      【讨论】:

      • 这里的排序有点矫枉过正。
      • 排序实际上是O(n*log n)
      • 您可以迭代列表,并手动比较,每次都保持最小值。但是sort 即使对于非常大的数组也会非常快。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 2014-06-23
      • 2015-07-06
      • 1970-01-01
      相关资源
      最近更新 更多