поэтому я выполнил соревновательное соревнование по программированию, которое мне предложил друг, и я смог в этом разобраться, но после этого я решил немного повеселиться с другими способами его решения.
Дело в том, что я нашел странный способ сделать это, но мы не можем по-настоящему обдумать сложность, потому что думаем, что она может не иметь формальной сложности?
Краткое объяснение проблема заключается в следующем:
У вас есть массив (возможно, не упорядоченный) целых чисел, все положительные и больше 0.
Ваша задача - сообщить мне первое целое число, которое отсутствует в массив, например:
[1, 4, 5,3, 2, 6, 10] ==> Ответ 7
Мой забавный способ сделать это было:
Вы перебираете массив один раз и помещаете все значения в HashMap, сохраняя максимальное значение в массиве в отдельной переменной.
После этого вы создаете для l oop, что идет от 1 до максимального значения массива.
Затем вы проверяете, если для l oop индекс существует в хэш-карте, если его нет, то вы нашли свой ответ.
Дело в том, что это будет O (n), но для l oop мне все равно немного .. Это O (n)? Неправильно говорить это O (n).
Представьте себе этот псевдокод:
let numArray = {1, 2, 3, 1000};
for i=1 TO max(numArray){
print "Hello there buddy"
}
Какова будет сложность этого? Есть ли формальная сложность?
Насколько я понимаю, утверждение, что оно имеет сложность, на самом деле не следует цели Big O Notation, поскольку его целью является оценка времени, которое потребуется для выполнения некоторого кода, имеет РАЗМЕР входные данные меняются, и здесь не имеет значения размер входных данных, просто значение максимального числа ... Если массив состоит из 3 элементов, а максимальное значение равно 1 миллиарду, все равно потребуется 1 миллиард итераций ...
Итак, есть ли для этого специальные обозначения c?
Как бы вы описали эту проблему?