2015-12-25 103 views
0

我需要從整數的數組中刪除所有重複的值,但仍保持該元素的順序:刪除重複的陣列元件

實施例:

10,20,20(duplicate),10(duplicate),50 

變爲:

10,20,50 
+0

[如何從數組中刪除元素?](http://www.cs.wisc.edu/~rkennedy/array-delete) –

+0

如果您需要從數組中刪除重複項,您可能需要另一個數據結構(培訓任務除外)。 – MBo

回答

0
  1. Integer爲關鍵詞創建詞典。值類型不重要。
  2. 遍歷輸入數組。對於輸入數組中的每個值,檢查該值是否在字典中。
  3. 如果是,這是重複的,丟棄。
  4. 如果否,這是第一次遇到該值。保留該值,並將其添加到字典中。

字典的要點是它可以執行O(1)查找。

僞代碼:

var 
    arr: TArray<Integer>; // input and output 
    Dict: TDictionary<Integer, Integer>; 
    SrcIndex, DestIndex: Integer; 
.... 
DestIndex := 0; 
for SrcIndex := 0 to high(arr) do begin 
    Value := arr[SrcIndex]; 
    if not Dict.ContainsKey(Value) then begin 
    arr[DestIndex] := arr[SrcIndex]; 
    Dict.Add(Value, 0); 
    inc(DestIndex); 
    end; 
end; 
SetLength(arr, DestIndex); 

顯然,你需要創建和銷燬,字典。我假設你知道如何做到這一點。而且我選擇修改陣列,但如果您願意,也可以創建一個新陣列。

+0

謝謝,它真的有幫助。 – Alca