Я работаю над заданием и не получаю ответа на некоторые вопросы.Время и сложность целочисленного массива
меня спросили:
Вход: массив A длины N, которая может содержать только целые числа от 1 до N
Выход: TRUE - А содержит дубликат, FALSE - в противном случае.
Я создал класс, который передает мои тестовые примеры.
public class ArrayOfIntegers {
public boolean isArrayContainsDuplicates(int [] intArray){
int arraySize = intArray.length;
long expectedOutPut = arraySize*(arraySize+1)/2;
long actualOutput = 0;
for(int i =0 ; i< arraySize; i++){
actualOutput = actualOutput + intArray[i];
}
if(expectedOutPut == actualOutput)
return false;
return true;
}
}
Теперь дальнейшие вопросы по этому
Можно ли дать ответ, а не уничтожить входной массив A?
Я не уничтожаю массив. Так что я сделал правильно?
Анализ временной и пространственной сложности вашего алгоритма?
Так что мне нужно написать что-нибудь о цикле for, чтобы как только я нахожу дублирующие элементы, я должен сломать цикл. Честно говоря, я не совсем понимаю концепцию сложности времени и пространства.
Возможно ли использовать O (n) для использования как времени, так и пространства?
Это должно быть Нет, так как n может быть любым числом. Опять же, я не очень понимаю о O (n).
Благодаря
Так много «проверьте наличие дубликатов в массиве», задайте домашние задания, так мало времени. –
Возможно, вам не хватает предположения: ваш массив может содержать элементы от 1 до N, но что, если в списке из 5 элементов они пропускают значения? EX: {1, 2, 2, 4, 5}. – Makoto
Микро оптимизация actualOutput = actualOutput + intArray [i]; может быть записано как actualOutput + = intArray [i]; – n00begon