dev
алгоритмически нам нужно ОДИН раз найти наименьшее число в массиве
если есть 1, то сразу false же ж
я бы ваще просто так сделал
for i in xrange (1,10000000000,1):
if i not in x:
return false:
Tishka17
Tishka17
У виджетов своя кривая модель внутри
Tishka17
Точнее тупая
dev
** return i !!
Tishka17
dev
имъх мой вариант самый простой)
dev
не самый быстрый (возможно)
dev
dev
Я не спец в питоне, если чо)
Tishka17
Slam!
Slam!
Tishka17
Чем дальше число ожидается, тем сет выгоднее
Mikhail
Подскажите через какую прогу лучше программировать?
dev
во, грамотная мысль!
dev
Tishka17
Aragaer
лучше чем что?
dev
Mikhail
Aragaer
а чо сделать-то надо?
dev
но пропуск может же быть между 1000000 и 1000002
dev
это размер и есть
dev
по олимпиадному нам по идее даже до конца цикла не надо доходить возможно!)
dev
то есть set не оптимален типа
Tishka17
но пропуск может же быть между 1000000 и 1000002
Ну если пропуск дальше чем sqrt(len*2), то сет выгоднее. Если ближе - нет. А дальше надо смотреть распределение вероятности. Один поиск числа в конце массива может испортить тысячу успешных в начале
Tishka17
dev
ну если он уже была ранее, то херли её снова то искать ;)
Tishka17
Вру насчёт len
Tishka17
Tishka17
Ну то есть в зависимости от содержания массива
Tishka17
Если он довольно случайный, то ты за первые несколько итераций цикла и так его целиком пробежишь
Tishka17
Более того, если числа в нем нет - ты обязан целиком пробежать массив
Tishka17
А значит ты делаешь
1. Прогон всегда (для успешного поиска)
2. Много частичных прогонов
А с сетом
1. Прогон всегда для сета
2. Константа для поиска каждого яисла
dev
ну в целом ты прав) оптимизировать дальше не вижу смысла)
Tishka17
В общем, вариант без сета хорош только если надо найти единицу
dev
но при этом частные случаи всё равно не будут учтены
dev
просто при наличии 1 время выполнения может быть в разы быстрее
dev
ну а дальше set)))
dev
так то вообще говоря нам надо найти МИНИМАЛЬНОЕ в массие = один проход
Michael
Вы конечно пытаетесь написать красивые пару строк кода,но есть два исключения которые вам все ломают. В списке может не быть пропуска и список может быть вообще пуст
Tishka17
Tishka17
При отсутствии единицы в массиве, время выполнения может быть на константу меньше. А оно в этом случае и так небольшое
dev
ну если в массиве единица первая стоит, то в n раз (ну типа))
Tishka17
Нет
Tishka17
Если в массиве первая единица, то для поиска двойки ты пройдешь все равно весь массив
Tishka17
(если двойки нет)
Tishka17
А в сете проверить единицу - быстро
Tishka17
Примерно столько же сколько проверить ее на первом месте
dev
имхо set слишком обширное для этой задачи
сравниваем min=1 с каждым последующим, в конце цикла (и если нет 1 в массие) получаем конечный ответ
dev
если есть 1 то заканчиваем раньше
Tishka17
Ты меня не понял
Tishka17
Если в массиве нет единицы, ты это сможешь понять только после проверки всего массива
Tishka17
Если в массиве нет двойки - то же самое
Anonymous
Интересен. Если Учёный Конрад Цузе не придумал компьютер кем бы я стал уборщиком ? юристом ? Бухгалтером ?
dev
ну вот я и говорю - полный перебор всё равно нужен (у тебя это set)
и если нужно учесть все варианты (=1), то простой перебор цикла решает И этот вариант
Tishka17
Ну сет - это один полный перебор и 0 частичных.
Tishka17
Без сета ты будешь пробегать по части массива
Tishka17
Много раз
Tishka17
Ведь не могут все числа стоять на первом месте
dev
for i in x: if min==i
разве много раз будет проходить?
dev
if min<i скорее
Tishka17
Откуда ты min возьмёшь?
Tishka17
А второй после min?
dev
min=1 обозанчу
Tishka17
Код в студию
Tishka17
И посмотри как он будет работать для поиска двойки и тройки
dev
значит min=0))
dev
чорд, не
dev
ну да, чо не
если i>1, то значит конец цикла
dev
x[i]
dev
а не i
dev
бля, туплю конечно)
но вообще я чую, что мой вариант более быстрый, тока надо придумтаь как)