簡體   English   中英

在數組數組中查找最大/最小元素的最有效方法

[英]Most efficient way to find max/min element in array of array

我想知道如何才能有效地返回數組array中的min / max元素。 我知道我可以遍歷整個數組,但是我認為可能會有更好的選擇。

let tab= [2];
tab[0] = [{name :"book", value : 8}, {name :"cake", value : 2}]
tab[1] ... etc

我想例如在此數組中找到最小值或最大值。

我使用Math.max.apply來執行此操作,因為它引用數組,同時減少重復數組。 但是,如果您不在乎,則應完全使用reduce,如下所述。

有很多方法可以做到這一點。 第一個是減少保持最大/最小值的數組:

 let tab= [2]; tab[0] = [{name :"book", value : 8}, {name :"cake", value : 2}] tab[1] = [{name :"apple", value : 1}, {name :"spaceship", value : 200}] console.log( tab.map(a=>a.reduce((a,b)=>a.value>b.value?a:b,{})).reduce((a,b)=>a.value>b.value?a:b,{}) ) 

如果我們按以下方式展平數組,這會更容易

 let tab= [2]; tab[0] = [{name :"book", value : 8}, {name :"cake", value : 2}] tab[1] = [{name :"apple", value : 1}, {name :"spaceship", value : 200}] console.log( [].concat.apply([], tab).reduce((a,b)=>a.value>b.value?a:b,{}) ) 

上面的那些函數獲取最大值,要獲取最小值,只需將a.value>b.value更改為a.value>b.value a.value<b.value 而且,這些函數的時間復雜度為O(n)因此對於較大的數組,它將更快地工作。


另一種方法是排序並獲得第一個/最后一個值

 let tab= [2]; tab[0] = [{name :"book", value : 8}, {name :"cake", value : 2}] tab[1] = [{name :"apple", value : 1}, {name :"spaceship", value : 200}] console.log( [].concat.apply([], tab).sort((a,b)=>b.value-a.value)[0] ) 

但是,此方法更為復雜,因為它先對數組排序(O(n log n)),然后再獲取第一個或最后一個元素(O(1))。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM