因此,作為輸入,我有兩個陣列 A 和 B。假設這些是這兩個陣列中的值:
A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 和 B = [1, 3, 5, 7, 9]
洗掉后陣列 A 應該是 [2, 4, 6, 8, 10]。
我已經撰寫(Javascript)這個功能演算法來解決這個問題:
for (var i=0; i < A.length; i ) {
for (var j=0; j < B.length; j ) {
if(B[j] == A[i])
A.splice(i, 1) // Removes 1 element of the array starting from position i
}
}
我想知道,不使用雙回圈是否可以解決這個問題?
uj5u.com熱心網友回復:
那這個呢:
let A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ;
const B = [1, 3, 5, 7, 9];
A = A.filter(num => !B.includes(num));
uj5u.com熱心網友回復:
是的。你可以使用一個Set. 就 Set 操作而言,您正在計算差異 A \ B。
使用針對O(1)時間查找進行了優化的集合將顯著加快計算與O(n2)使用includes()或雙for回圈時的差異O(n)。
const A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const B = [1, 3, 5, 7, 9]
const setB = new Set(B);
const difference = A.filter(x => !setB.has(x));
console.log(difference);
uj5u.com熱心網友回復:
也許那?
const
A = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
, B = [ 1, 3, 5, 7, 9 ]
;
for (let i = A.length, j= B.length -1 ; i-- ; )
{
if (A[i]===B[j]) { A.splice(i,1); j-- }
}
document.write( JSON.stringify(A) )
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/463269.html
標籤:javascript 数组 算法 循环 for循环
上一篇:如何在CSS中正確計時影片?
