JavaScript 中從排序的字面量陣列中刪除重複項
問題陳述指出,給定一個由使用者作為輸入源提供的排序數字陣列,我們需要從中刪除重複或重複的元素,使其成為一個包含唯一元素的新陣列。
什麼是 JavaScript 中的排序陣列?
排序陣列是 JavaScript 中的一種陣列,它遵循一定的順序,其中每個元素在使用 JavaScript 本身中的 sort 方法之前都按字母和數字順序排序。預先排序的陣列可以讓你更容易更高效地加快搜索並在排序陣列上執行其他操作。
問題陳述的輸出是刪除數字陣列中存在的重複和冗餘元素,可以視覺化如下
const sortedArray = [ 1 , 2 , 2 , 3 , 4 , 6 ,6 ]; // perform algorithm to remove duplicates const duplicateElementRemovedArray = [ 1 , 2 , 3 , 4 , 6 ];
演算法
步驟 1:宣告一個名為 removeDuplicates 的函式,該函式接受一個排序陣列作為輸入源,如問題陳述中所述。
步驟 2:使用外部 for 迴圈遍歷陣列的每個元素,從第 0 個索引到陣列的長度。
步驟 3:使用內部迴圈,我們從排序陣列的長度(即最後一個元素)向後遍歷,直到外部迴圈 i 值加 1。
步驟 4:現在使用比較運算子檢查和比較外部迴圈中 i 的值與每次迭代中 j 迴圈的每個值,以檢查是否存在任何重複項。
步驟 5:如果發現任何重複項,則使用 splice 方法刪除在 i 或 j 索引處的一個特定元素,一旦相等匹配成功,則丟棄並刪除重複元素,其中 splice 方法中的第二個引數告訴刪除多少個字元。
步驟 6:一旦使用巢狀迴圈完成所有重複項的檢查和刪除,則成功返回唯一的元素排序陣列。
示例
function removeDuplicates(sortedArray) { for(let i = 0 ; i < sortedArray.length ; i++) { for( j = sortedArray.length ; j>=i+1 ; j--) { if(sortedArray[i] === sortedArray[j]) { sortedArray.splice(i,1); } } } return sortedArray; } const sortedArray = [ 1,1,2,3,4,4,5,6,6,7,8]; const uniqueElementsArray = removeDuplicates(sortedArray); console.log(uniqueElementsArray);
輸出
[ 1, 2, 3, 4, 5, 6, 7, 8 ]
時間和空間複雜度
在上述演算法中,我們最初使用了巢狀迴圈,它需要 array.length 遍歷,因此導致 O(n^2) 的時間複雜度,JavaScript 的 splice 方法也需要 O(n) 的時間複雜度來提取或刪除某個元素,因此導致 O(n^2) + O(n) = O(n^2) 最壞情況下的時間複雜度。
但空間複雜度為 O(1),即常數,因為我們沒有分配任何額外的記憶體來完成從排序數字陣列中刪除重複項的任務。稍後我們還可以使用呼叫該函式,並在控制檯中輸出結果,結果將是
結論
這就是我們如何透過邏輯思維和編碼上下文來解決上述問題陳述,從用於遍歷和訪問陣列元素的巢狀迴圈和 splice JavaScript 方法開始,以完成問題陳述的執行。