有沒有更好的方法來扁平化整數陣列?這個解決方案很簡單,但我真的不知道它的時間復雜度是否最好。
const list = (arr) => {
//to avoid mutating the the entry data
let newArr=[...arr]
return newArr.flat().sort((a,b)=>a-b)
}
// this logs [1,2,2,4,5,6,7,8]
console.log(
list([2,[1,5],4,2,[6,8,7]])
)
我想也許通過減少我可以平展陣列并訂購它?
我正在嘗試在我的演算法中獲得更好的性能
uj5u.com熱心網友回復:
沒有更好的方法來展平和排序整數。獲得更好時間復雜度的唯一方法是使用不同的排序演算法,因為默認的 Javascript 演算法是合并排序,它具有 O(nlogn) 復雜度。這是整數排序演算法的維基百科頁面,應該不太難實作。
我不知道你的整數范圍是多少,但如果它真的很小,你可能只想進行計數排序(時間復雜度 O(n)),因為它很容易實作(GeeksForGeeks有一個實作)。但是,如果您只有幾個范圍很大的數字,您可以進行基數排序(時間復雜度會有所不同:可能低至 O(n) - 取決于使用的引數)。
uj5u.com熱心網友回復:
我認為這是最簡單的。
let abc = [[3,1],[4,1,5],[9,[2,6]]];
let abc1 = abc.flat(); // [3,1,4,1,5,9,[2,6]];
console.log(abc1.sort()); // [1,1,[2,6],3,4,5,9];
如果您正在尋找一種方法來使基本陣列內部不再有任何陣列,它應該包含一個 for 回圈,用于基本陣列的內容以查找哪些仍然是陣列,或者使用 map() 來更改只是詳細陣列的內容。此鏈接中 flatMap()的頂部示例將展示如何在一個函式中完成這兩個操作!
uj5u.com熱心網友回復:
我會使用flatMap并排序
const arr = [2,[1,5],4,2,[6,8,7]]
const flattened = arr.flatMap(num => num).sort();
console.log(flattened);
// Array [1, 2, 2, 4, 5, 6, 7, 8]
uj5u.com熱心網友回復:
如果內置方法,則無需復制陣列即可完成此操作,因為 flat 已經會吐出一個新陣列。
const flatSort = arr => arr.flat().sort();
console.log(flatSort([3,2,4,1,5,6,7,8,9, 0]));
console.log(flatSort([2,[1,5],4,2,[6,8,7]]));
您可以撰寫自己的扁平化和排序/插入代碼。那里有很多演算法,這里有一個簡單的演算法可以讓你的想法在你腦海中滾動。
function insertSort(arr, val) {
const len = arr.length;
let i = 0;
while(i < arr.length) {
if (arr[i] >= val) {
arr.splice(i, 0, val);
return;
}
i ;
}
arr.push(val);
}
const flatSort = (nestedArray, arr=[]) => {
nestedArray.forEach(val => {
if (Array.isArray(val)) {
flatSort(val, arr);
} else {
insertSort(arr, val);
}
});
return arr;
};
console.log(flatSort([3,2,4,1,5,6,7,8,9, 0]));
console.log(flatSort([2,[1,5],4,2,[6,8,7]]));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523888.html
上一篇:比較兩個大型pocos串列時,從第一個串列中獲取不匹配的專案
下一篇:演算法改進:計算航向的有符號變化
