無需借助Set 即可高效地從數組中刪除重複項
您已努力創建一個自定義解決方案來從數組中刪除重複元素,但效能瓶頸已經出現。為了優化此實現,我們將分析您的方法的缺點並提出替代策略。
分析您的演算法
您的演算法嘗試透過比較每個值來搜尋重複項元素與每個後續元素。這種詳盡的比較導致時間複雜度為 O(n^2)。對於大型數組,此策略可能變得極為低效。
最佳化方法
為了顯著提高效能,我們可以考慮以下最佳化:
替代解決方案
雖然上述最佳化可以為了提高演算法的效能,您也可以考慮其他已建立的技術:
實作
基於最佳化方法,使用雜湊映射的演算法的修改版本可能是:
public static int[] removeDuplicatesWithoutSet(int[] arr) { HashMap<Integer, Boolean> map = new HashMap<>(); int end = arr.length; for (int i = 0; i < end; i++) { if (map.containsKey(arr[i])) { int shiftLeft = i; for (int k = i + 1; k < end; k++, shiftLeft++) { arr[shiftLeft] = arr[k]; } end--; i--; } else { map.put(arr[i], true); } } int[] whitelist = new int[end]; for (int i = 0; i < end; i++) { whitelist[i] = arr[i]; } return whitelist; }
以上是如何在不使用集合的情況下有效地從數組中刪除重複項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!