Порридж В Ко-ливинге
Хотите задачку?
Порридж В Ко-ливинге
Где здесь баг?
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
nums += [0]
for i in range(len(nums)):
while nums[i] in range(len(nums)) and nums[nums[i]] != nums[i]:
nums[i], nums[nums[i]] = nums[nums[i]], nums[i]
nums[0] = 0
for i, n in enumerate(nums):
if i != n:
return i
return len(nums) or 1
Порридж В Ко-ливинге
Viktor
Порридж В Ко-ливинге
Viktor
Где?
не, вроде вот это условие nums[i] in range(len(nums)) избавит от этого
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Вместо привычного a > i && i < b
Viktor
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Или вы просто прогнали? 🤣
Viktor
Не, прогнал, конечно!
Порридж В Ко-ливинге
Viktor
Я как раз из кода и не вижу почему он бесконечный
Порридж В Ко-ливинге
Там одна строчка всего
Порридж В Ко-ливинге
Через 10 минут скажу что там)
Порридж В Ко-ливинге
Щас проверю, есть ли этот “баг/фича” в JS
Порридж В Ко-ливинге
Viktor
Есть)
Давай, не томи. Знаешь, что такое интрига. Что там за ошибка?
Порридж В Ко-ливинге
Казалось бы, мы ничего не поменяли, но щас могу показать как это видит интерпретатор
Порридж В Ко-ливинге
nums[nums[i]], nums[i] = nums[i], nums[nums[i]]
против
nums[i], nums[nums[i]] = nums[nums[i]], nums[i]
Порридж В Ко-ливинге
'''
i == 0
nums[nums[i]], nums[i] = nums[i], nums[nums[i]]
nums[nums[i]], nums[i] = nums[0], nums[nums[i]]
nums[nums[i]], nums[i] = 1, nums[nums[i]]
nums[nums[i]], nums[i] = 1, nums[nums[0]]
nums[nums[i]], nums[i] = 1, nums[1]
nums[nums[i]], nums[i] = 1, 2
nums[nums[0]], nums[i] = 1, 2
nums[1], nums[i] = 1, 2
nums[1] = 1
[1, 2, 0] -> [1, 1, 0]
nums[i] = 2
nums[0] = 2
[1, 1, 0] -> [2, 1, 0]
[1, 2, 0]
[2, 1, 0]
[2, 1, 0]
[0, 1, 2]'''
'''
i == 0
nums[i], nums[nums[i]] = nums[nums[i]], nums[i]
nums[i], nums[nums[i]] = nums[nums[0]], nums[i]
nums[i], nums[nums[i]] = nums[1], nums[i]
nums[i], nums[nums[i]] = 2, nums[i]
nums[i], nums[nums[i]] = 2, nums[0]
nums[i], nums[nums[i]] = 2, 1
nums[0], nums[nums[i]] = 2, 1
nums[0] = 2
[1, 2, 0] -> [2, 2, 0]
nums[nums[i]] = 1
nums[nums[0]] = 1
nums[2] = 1
[2, 2, 0] -> [2, 2, 1]
[1, 2, 0]
[2, 2, 1]
[2, 2, 1]
[1, 2, 1]
[1, 2, 1]
[2, 2, 1]
[2, 2, 1]
[1, 2, 1]
[1, 2, 1]
...
'''
Порридж В Ко-ливинге
Я там просто заменяю по очереди переменные
Viktor
'''
i == 0
nums[nums[i]], nums[i] = nums[i], nums[nums[i]]
nums[nums[i]], nums[i] = nums[0], nums[nums[i]]
nums[nums[i]], nums[i] = 1, nums[nums[i]]
nums[nums[i]], nums[i] = 1, nums[nums[0]]
nums[nums[i]], nums[i] = 1, nums[1]
nums[nums[i]], nums[i] = 1, 2
nums[nums[0]], nums[i] = 1, 2
nums[1], nums[i] = 1, 2
nums[1] = 1
[1, 2, 0] -> [1, 1, 0]
nums[i] = 2
nums[0] = 2
[1, 1, 0] -> [2, 1, 0]
[1, 2, 0]
[2, 1, 0]
[2, 1, 0]
[0, 1, 2]'''
'''
i == 0
nums[i], nums[nums[i]] = nums[nums[i]], nums[i]
nums[i], nums[nums[i]] = nums[nums[0]], nums[i]
nums[i], nums[nums[i]] = nums[1], nums[i]
nums[i], nums[nums[i]] = 2, nums[i]
nums[i], nums[nums[i]] = 2, nums[0]
nums[i], nums[nums[i]] = 2, 1
nums[0], nums[nums[i]] = 2, 1
nums[0] = 2
[1, 2, 0] -> [2, 2, 0]
nums[nums[i]] = 1
nums[nums[0]] = 1
nums[2] = 1
[2, 2, 0] -> [2, 2, 1]
[1, 2, 0]
[2, 2, 1]
[2, 2, 1]
[1, 2, 1]
[1, 2, 1]
[2, 2, 1]
[2, 2, 1]
[1, 2, 1]
[1, 2, 1]
...
'''
Порридж В Ко-ливинге
Порридж В Ко-ливинге
По схеме понятно хотя бы из-за чего это ве происходит?
Порридж В Ко-ливинге
Viktor
Значит не понятно 🤣
Наверное, если каждую строку прочитать и сделать подстановки - станет ясно. «Но делать этого я конечно же не буду» (с)
Порридж В Ко-ливинге
Viktor
Так я же подставил за вас 🤣
ну да, короче, если поменяется nums[i] справа, то слева его уже использовать нельзя — потому что хотелось-то не этого. хочется исходные значения поменять, поэтому порядок важен.
Viktor
любопытные баг, мне нравится.
Viktor
это даже не баг никакой, а просто так работают последовательные вычисления, думаю где угодно будет так же, в любом языке.
Порридж В Ко-ливинге
Viktor
Порридж В Ко-ливинге
Я зачем-то после пользования Питона стал проверять есть ли индекс в массиве
Viktor
@Kadroff привет! @Glazomer47 сможешь рассказать товарищу про собеседования в Яндекс на фронта? какой там формат
Порридж В Ко-ливинге
Viktor
Без шуток. @Kadroff просто дошёл до меня в личке, и я попросил добавиться его в чатик чтобы ты рассказал, т.к. ты недавно собеседовался.
Viktor
Человек готовится.
Порридж В Ко-ливинге
Ааа, я рассказать про фронта ему? Я думал наоборот 😆
Viktor
Порридж В Ко-ливинге
Ну хорошо, опыт у меня большой, @vitkarpov знает 🤣
Marsel
Всем привет, было бы очень полезно послушать
Порридж В Ко-ливинге
В общем если на стажера, то там сильно не шманают, самое главное:
1) идеально знать сам язык (YDKJS и javascript ninja даст почти все НЕ БАЗОВЫЕ знания)
2) Шарить в алгоритмах, Литкод на уровне Изи, редко медиум
Marsel
Вообще есть 3 пути, на мой взгляд как туда попасть
1) ШРИ
2) Стажировка
3) Пойти на вакансию джуна
Мне кажется первый самый легкий путь, а 3 наоборот
Порридж В Ко-ливинге
Стажерам так же меньше собесов, хотя по сложности от мадлов и сеньеров не отличаются, только нет Сист дизайна и меньше алгоритм секции.
1) Сначала будет телефонный скрининг. У меня из 4 собесов (не српашивай как я за полгода 4 раза проходил собес) 3 раза был на знание JS (базовые вопрос про типы, объекты, промисы, замыкание) и 1 раз интервьюер СРАЗУ без проверки языка давал задачки.
2) Далее очное, он у меня был один раз, меня собеседовал Хохулин (щас расскажу почему фамилия важна), у меня была задачка “Дан массив массивов размера 2, в нем лежит начало и конец промежутка, выдайте массив строк, обозначающие промежутки, попутно сливая из”, т.е. [[1,4],[6,8],[7,10]] -> [“1-4”, “6-10”]
3) Интервью с командами. В одну команду ты пройдешь 99%, т.к. там будет тот, кто у тебя уже брал интервью, т.к. он скажет “Ну, алгоритмы я знаю как ты раешь, давай побазарим”
Остальные могут спросить легкую задачку, и скорее всего они просто будут хотеть что-то от тебя услышать (например меня собеседовало 2 чувака еще, один меня завалили до этого еще на скрининге, но в этот раз я прошел к нему, а второй хотел чтобы я сказал “Функциям можно передавать колбэк”, а у метя тогда мозг не соображал… Рандом)
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Viktor
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Ну, если они облегчат вступительное
Marsel
Спасибо большое. Но как и в 1 и во 2 варианте, думаю нужно будет очень стараться, чтобы было предложение там остаться
Порридж В Ко-ливинге
А щас только олимпиадников берут почему-то, я вот сам не могу попасть
Marsel
Разве так много олимпиадников идут на фронт, я думал им больше интересно big data и все в этом духе
Порридж В Ко-ливинге
Нет, у HR щас шиза, и они всех не олимпиадников отклоняют. Не знаю почему, но все большие дяди в Яндексе и некоторые источники говорят об этом
Viktor
разумеется подаваться лучше через рефер, чтобы это резюме вообще увидели.
Viktor
в моем случае, я у меня в резюме было «верстал говносайты в студии на потоке» — поэтому путь был только через шри 🙂
Marsel
Кстати, вот вопрос, мы не опенсорс и код конечно же не могу показать. Это как-то влияет или можно только рассказать о проекте без кода. Просто где-то читал, что смотрят код на твоих предыдущих проектах
Viktor
Конечно можно и нужно без кода. Надо рассказать какую проблему решал, как решил, какой результат получил.
Viktor
Все это можно сделать не нарушая NDA.
Viktor
Marsel
Удивительный факт, приезжал на конференцию к нам в город Андрей Мелихов, удалось спросить, зачем алгоритмы фронту и все в этом духе. Его ответ был интересным: "Чтобы пройти техническое собеседование"
Marsel
Потом только загуглил с кем удалось пообщаться, оказывается "медийное лицо"
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Я вот щас на проекте с человеком, который алгоритмы никогда не решал, сразу видно по коду, какие структуры он использует
Viktor
Порридж В Ко-ливинге
Порридж В Ко-ливинге
АААА, блин, я это репостнуть хотел
Порридж В Ко-ливинге
Порридж В Ко-ливинге
А тут репосты запрещены
Viktor
Мне тут вчера задачку скинули порешать, на дпшечку. Интересная. Час решал. Рекомендую. Вообще вижу, что дпшечка самая сложная история для понимания. В понедельник буду разбирать задачу про робота, классика дп, которая встречается на собеседованиях. В целом, для собеседований дп редкая история, по идее.