Вот общий вопрос интервью, который я натолкнулся, однако я не смог улучшить его так, как он требует.
assume we have an int array int[] A, we want to find the first duplicate entry.
-
почти каждый может подумать об использовании HashSet и добавить к нему во время разбора. Это приведет к времени O (n) и O (n). После этого меня попросили решить его без других структур данных. Я сказал, что самая туманная идея будет сравнивать каждую в O (n ^ 2) времени. И затем меня попросили улучшить время O (n ^ 2).
-
И чтобы улучшить его, я подумал об использовании массива фиксированного размера (при условии, что максимальное число равно n), boolean [] b = new boolean [n]; однако мне не разрешили использовать этот метод.
-
Затем я подумал об использовании переменной int, используя манипуляции с битами, если максимальное число меньше 32, тогда для n мы можем нажать 1 на n бит влево и | к контролеру, затем и контролеру к следующей записи в массиве, чтобы проверить, > ли это > 0. например:.
int c = A[i]; if(check & (1 << c) > 0) return false; check |= 1 << c;
однако это также не допускается.
Итак, был намек на то, что я могу использовать сам массив как hashset/hashtable и "линейное хеширование"?
любая помощь? спасибо