這個問題在這里已經有了答案: 遞回深度展平的時間復雜度 1 個答案 2天前關閉。
這個函式只需要多維陣列并使其平坦
例如 flatArray([1,[1,2,4,[2,3]],1]) -> [1,1,2,4,2,3,1]
我想知道這個演算法的時間復雜度。
let flatArray = function(numsArr){
let container = [];
for(let i = 0;i<numsArr.length;i ){
if(Array.isArray(numsArr[i])){
container = [...container,...flatArray(numsArr[i])]
}else{
container.push(numsArr[i])
}
counter
}
return container;
};
uj5u.com熱心網友回復:
您的函式需要 O(n 2 ) 時間。最壞的情況類似于[1,[2,[3,[4,[5,[6...]]]]]],其中每個元素將被復制到一個新串列中 n-1 次。
要在 O(n) 時間內實作此功能,您必須避免所有復制:
let flatArray = function(numsArr){
let container = [];
function addArray(arr) {
for (const val of arr) {
if (Array.isArray(val)) {
addArray(val);
} else {
container.push(val);
}
}
}
addArray(numsArr);
return container;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513464.html
