最佳化陣列中的重複刪除演算法
提供的程式碼旨在從陣列中刪除內建重複值,而不使用Set 等工具或迭代器。然而,在處理大量元素時,它面臨效能瓶頸。這個問題源自於巢狀循環結構,其中每個元素都會與所有後續元素進行比較。
為了提高演算法的效率,請考慮以下最佳化策略:
利用HashSet:
雖然任務明確禁止使用Set 或HashSet,但值得注意的是,HashSet 提供了消除重複的有效解決方案。它的實作採用哈希表來追蹤每個元素的存在,從而允許恆定時間查找和插入。
Set<Integer> uniqueValues = new HashSet<>(); for (int num : arr) { uniqueValues.add(num); }
產生的 uniqueValues Set 將只包含不同的元素。
保留元素順序:
如果保留元素的原始順序至關重要,則可以對所提供的演算法進行修改版本採用:
// Create a boolean array to track duplicates boolean[] duplicates = new boolean[arr.length]; // Find and mark duplicates in the first iteration for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) { duplicates[j] = true; } } } // Create a new array to store unique values int[] uniqueArr = new int[arr.length - duplicates.length]; int uniqueIndex = 0; // Copy unique values into the new array for (int i = 0; i < arr.length; i++) { if (!duplicates[i]) { uniqueArr[uniqueIndex++] = arr[i]; } } return uniqueArr;
演算法實作了O(n²) 時間複雜度,同時保留原始元素順序。
以上是我們如何在不使用內建集合函數的情況下優化大型數組的去重演算法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!