2015-09-20 22 views
2

對於此類,我必須在1000x250二維數組中找到所有唯一值。如何優化此外觀以獲得唯一編號算法功能

數據介於2000000到2200000之間。所有數據存儲在稱爲數據的2D int數組中。

我遇到的問題是需要一些時間來運行這個,我的教授說我們不能使用其他數據集,並且我們還需要優化我們的代碼,以便以良好的速度運行。

int[] uniqueValues = new int[200000]; 
    boolean isUnique = true; 
    int uniqueCounter = 0; 

    for (int i = 0; i < data.length; i++) { 

     for (int j = 0; j < data[i].length; j++) { 

      for (int x = 0; x < uniqueCounter; x++) { 

       if (data[i][j] != uniqueValues[x]) { 
        isUnique = true; 
       } else { 
        isUnique = false; 
        break; 
       } 

      } 

      if (isUnique) { 
       uniqueValues[uniqueCounter] = data[i][j]; 
       uniqueCounter++; 
      } 

     } 
} 
+1

這個問題應該去的代碼審查:http://codereview.stackexchange.com/ – Sweeper

+3

*「我的教授說我們不能使用其他數據集」* - 這沒有意義。可能你錯誤​​地翻譯了它。他*實際上*說了什麼? –

+0

你應該使用一個Set。如果您不允許使用預定義的Set實現,那麼您應該創建自己的Set數據結構。 –

回答

1

那麼,如果你分配20萬個整數的結果,無論如何,你可以用它們作爲計數器的每個值,然後收集只發生一次的:

for (int i = 0; i < data.length; i++) { 
    for (int j = 0; j < data[i].length; j++) { 
    uniqueValues[data[i][j] - 2000000]++; 
    } 
}   

int uniqueCounter = 0; 
for (int i = 0; i < uniqueValue.length; i++) { 
    if (uniqueValues[i] == 1) { 
    uniqueValues[uniqueCounter++] = i + 2000000; 
    } 
} 
+0

@rsutormin在這種情況下,值不會是唯一的.... –

+0

對!我理解錯誤的任務。 – rsutormin