2014-11-28 6 views
-3

Мне нужно найти наименьший массив из списка массивов n в 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]

Примечание: Число массивов не определен, может быть 10s или 100s из массива, передаваемые в функцию, используя fn.call

+1

Что вы имеете в виду под 'маленьким'? минимальное количество элементов или минимум суммы элементов? – Codor

+7

Массивы имеют свойство '.length'. – usr2564301

+0

Проверьте их один за другим. Вам может понадобиться массив массивов в качестве ввода для 'doSomething'. – usr2564301

ответ

1

проблема может быть решена с помощью следующей реализации.

function doSomething(){ 
    var Result = a; 
    if (b.length < Result.length) 
     Result = b; 
    if (c.length < Result.length) 
     Result = c; 
    return Result; 
} 
0
// 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]; 
+1

Сортировка здесь немного переполнена. – usr2564301

+1

Сортировать на самом деле O (n * log n) –

+0

Вы можете перебирать список и сравнивать вручную, сохраняя минимум каждый раз. Но 'sort' будет очень быстрым даже для очень больших массивов. –

1
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)