2015-09-20 5 views
2

Для этого назначения алгоритма в классе I необходимо найти все уникальные значения в 2D-массиве 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

Ну, если вы выделяете 200000 Интс результата в любом случае, вы можете использовать их в качестве счетчиков для каждого значения, а затем собрать те, которые происходят только один раз:

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

Смежные вопросы