Это не сеньер явно. 3я задача просто уровень джун джун. Хранить 2 массива, целевой и с отсортированными уникальными значениями, любой реально работающий джун это сделает . 2я хосапде, проверка наследования эксепшена. До перемотки видел что там было if т.е, что произойдет если туда в параметр, а как я понял это массив, передадут 3е или n значение?). Первую ничерта не понял, но видимо потому что питон вижу 1й раз. Мне жаль рынок ИТ если такие менторят людей в интернете и их слушают. Теперь понятно почему хр не могут найти людей
Забавно устроено, что имея многолетний опыт backend разработки (python, php, java), видя задачки на видео, скорее всего школьной или университетской программы, понимаешь что не прошел собеседование на junior позицию
Пару комментов: задача 2. 1. Полагаю не стоит использовать isinstance, т.к. есть риск получить проблемы с наследованием при расширении списка передаваемых эксепшенов (например, передали еще LookupError, lambda: print(3)) и получили не ожидаемое поведение). type проверит на точное совпадение. 2. Вызов ex[1]() производится без параметров, что в случае IndexError("bar") выбросит missing required positional argument. Полагаю, это проблема постановки задачи и некоторой не внимательности при выполнении. 3. raise e стоит вынести из условия, иначе ломается логика, если выбрасывается эксепшн не переданный в списке. задача 3. 1. Использование list говорит, что у нас О(1) будет не совсем честная. Если докапываться, то какой-нибудь связный список - самое то. 2. Для второго списка за счет чуть большего количества памяти можно поддерживать более простую логику (храним список минимумов). def push(self, num: int) -> None: self.stack.append(num) self.min_nums.append(min(lst[-1] if lst else num, num)) def pop() -> int: self.min_nums.pop() return self.stack.pop()
Какой джун ? Серьезно ? Хорошо давай задачу для мидл. Я считаю что на позицию джун одолжен быть один вопрос готов ли ты уволится через месяц если не справиться. Все какие задачи и лайвкодинг . Понятно что пару вопросов надо задать чтоб понять в теме человек или нет .
то что что то существует в пайтоне - не значит, что оно зарезервировано object - не зарезервировано, но объект с таким именем существует, но назвать переменную так можно in, for, class, def, async, await, return, and, or - зарезервированны, такими именами не получится назвать переменные
@@ogone4ek880 Если вы используете object как имя переменной, вы затрудняете доступ к встроенному классу object в текущем контексте. Это может привести к путанице и ошибкам, особенно если ваш код зависит от базового функционала этого класса. Это фундаментальная штука и в коде она была неспроста. Основа основ ООП.
думаю здесь нужно было использовать бинарный поиск так как если у нас нужно цифра или число будет находиться в самом конце то программа будет каждый элемент перебирать
@@saitaro круглые скобки это не лист компрехеншен а генератор эскпрешн, ленивые вычисления, некст один раз выполнится да и все, дальше эвальюейтится ничего не будет(но понятное дело, что само условие будет проверяться для каждого элемента до первого трушного)
2 месяца лета не зря... 1 задачу я решил, на второй запутался, но по ходу событий понял, что надо было сделать, а в 3 я сразу понял, что надо было сделать, да и сделал
@@funtickgd9502 Помоги, пожалуйста. Вот тоже из скачанных курсов получил базу, но а щас я хз, че мне делать.. Хочу на веб-разраба пойти и по идее до изучения самого django нужно просто решать задачи и так далее, но я вообще не понимаю, где можно было бы подчеркнуть действительно важные и полезные знания ,а где практикой их закрепить.
16:00 в строке 62 мы вызываем коллбек с помощью ex[1](). Это сработает, если у всех коллбеков нет аргументов. Но в предложенном задании у них разные сигнатуры: у коллбека bar() нет аргументов, а у коллбека lambda есть - '_'. Не уверен, но кажется, чтобы это работало, надо перед вызовом коллбека определять, какая у него сигнатура и вызывать его с ожидаемым количеством аргументов. IMO. P.S.: или исправить кортеж с анонимной функцией, чтобы она тоже была без параметров (IndexError, lambda : print(2))
Раньше когда слушал других программистов думал, что не дотягиваю даже до +- уровня стажёра, а после просмотра видео понимаю, что я уже сижу на нем точно, а возможно даже ещё годик другой практики и буду Джуном
Я себя отношу к джуну… Ибо изучаю сам все и только лишь полгода))) но эти задачки я бы решил немного по-другому, но в целом контент прикольный) Спасибо))) А декораторы, это очень полезная и хорошая штука!
Для меня сложно было второе. В третьем сразу понял что нужно параллельно сортированный список создавать при инициализации и добавлять в нужное место новый при пуше
Так много комментариев, что задачи легчащие и не тянут даже на стажера и так мало комментариев, что третья задача решена не верно, точнее не для всех случаев) Видимо эти комментаторы только во сне разработчики)
Решение у задачи 3 сломается. Например, если запушить 323, а потом достать два последних элемента. В стеке останется 3, а список мин элементов будет пустой. Решение: вместо двух массивов сделать один двумерный. При каждом push в него будет добавляться: [добавленный элемент,мин элемент на момент добавления]
Почему список останется пустой? При пуше первой тройки в него добавится тройка по условию not mins, потом при втором пуше добавится двойка т.к она меньше последнего элемента списка т.е тройки которую мы добавили. При пуше последней тройки в список ниче не добавится. В итоге в стеке 323 а в списке 32. Первый пуп удаляет тройку из стека и ниче не удаляет из списка, второй удаляет двойку везде, третий удаляет двойку везде. Все ок
вообще pop из-за структуры данных лист, не будет работать. так как лист требует сдвига, это медленно. и top тоже кстати будет медленный иногда из за переаллокации нужно создавать всего три связных списка, один чтобы работал pop а другой чтобы работал top только недавно увидел аналогичную задачу про это) изначально офигевал как можно такое сделать. задача была - что то про нахождения минимальной суммы для каждой подстроки в K элементов в массиве аналогичным образом делается
Оскорбительно у людей такое спрашивать. Данная задача решается за 20-40 секунд ( с учётом написание кода ) Я считаю на такой вакансии куда важней понять есть у человека инженерное мышление. Может ли он понять что написанно в коде и его знание английского языка.
Я почему то думал что Джунам сложнее вопросы задают, я знаю почти всё что было на собесе из видео, но я до сих пор не нашел работу, может я что-то делаю не так. Хотя у меня и собеса никогда не было :). Видео придало мне уверенности в своих знаниях, надеюсь скоро найду работу
А на какое количество вакансий ты отправлял резюме? Сейчас на джунов высокая конкуренция, поэтому надо просто часами сидеть на сервисах поиска работы и закидывать своё резюме везде где можешь
Я немного не понял, но получается что в min_nums будут добавляться не все числа? разве за этим не последует ситуация когда get_min даст неверное значение, вроде 4 5 1 1, список минимумов заполнится единицами, а когда их обе вытолкнут, то get_min ничего не вернет?
Я тоже запутался но потом понял что здесь в стек числа добавляются с права и убираются справа. В этом случае если число не добавляется в min_nums то оно там и не нужно, ведь его удалят прежде чем справа останется минимальное число)
Первые две задачи без комментариев - там ничего сложного. 3-я задача встречалась в нескольких курсах по алгоритмам и структурам данных, поэтому если знаешь, то реализовать ее тоже не составляет большого труда.
Третья задача это 155 с литкода, не? Кстати, что лучше на собесе делать если встретил задачу к которой знаешь решение? Прикинутся что видишь её в первый раз или признаться что знаешь?
Интересное видео. Я (пытаюсь) писать игры и программы на Годот и там язык в некотором роде схож с питоном, но захотелось глянуть что тут. Половину слов и понятий не знаю, поэтому хотелось бы задать вопрос по последней задаче. Если нужен минимальный элемент массива, то зачем создавать массив из предыдущих его значений? И что значит "за постоянное время"? В решении не заметил какого-либо уравнённого значения скорости выполнения функций 🤔
Постоянное время - оно же константное, оно же O(1). Что бы нормально это понять лучше почитать простую книжку по алгоритмам. Можно начать с "Грокаем алгоритмы". Конкретно здесь: Если не было бы ограничения на постоянное время, get_min() мог бы просто возвращать встроенную min(self.stack), а она работает за линейное время. Если написать свою реализацию min, то это сразу видно: чтобы найти минимальный элемент придётся перебрать все элементы, то есть в худшем случае минимальный элемент будет последним, и в среднем время поиска линейно зависит от длины последовательности. В отличии от операций push, pop, top: когда мы в конец просто добавляем / удаляем элемент, это не зависит от размера последовательности (на самом деле там есть подводные камни про перевыделение памяти при увеличении размера). В реализации за постоянное время и есть смысл задачи. Артем сразу это упоминает на 18:01.
@@ЯнПацюпа Спасибо, вроде бы понял. А что даёт -1 в номере индекса элемента массива? (Или это не оно?) Я так понимаю последнее значение переменной из массива, да?
@@droidnah Да, это последний элемент. Это стандартный способ в Python, он поддерживает отрицательные индексы, можно вообще посмотреть на срезы - они очень удобные)
@@droidnah Рад слышать. Вообще если есть желание поплотнее посмотреть на Python, можно для этого взять книжку Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация данных, веб-приложения (Eric Matthes. Python Crash Course). Там как раз первый проект второй части - это игра на pygame (первая часть - основы Python), правда алгоритмов там нет
"One Stack (stack of pair value,minvalue):" def pop(O):return O.s.pop()[0] $$$ def top(O):return O.s[-1][0] $$$ def get_min(O):return O.s[-1][1] $$$ def __init__(O): O.s=[(float('inf'),float('inf'))] $$$ def push(O,v): O.s.append(v,min(v,O.get_min()) # храним в стеке сами значения и его текущий минимум
в защиту автора видео хочу сказать, что на собеседовании очень сильный стресс и даже такие легкие задачи как первая могут вогнать в ступор, так как очень много нервов мешает думать. Это надо прокачивать скилл прохождения собеседований, чтобы на них не переживать
3:09 Всегда хочеться треснуть чем-то тяжелым тех кто в одну строку пишет много операторов, как это в строке 2 и 9. Код в первую очередь должен быть визуально легко читаем, потому что читаем код мы чаще чем пишем, экономия количества строк не дает преймуществ, кроме демонтрации умственных отклонений автора подобного кода.
Кому интересно, вот такой код у меня получился на последний вопрос. class Stack: def __init__(self): self.stack = [] self.pref_min = [] self.current_min = None def pop(self): self.stack.pop() self.pref_min.pop() self.current_min = self.pref_min[-1] def push(self, num): self.stack.append(num) self.current_min = min( self.pref_min[-1], num) if self.pref_min else num self.pref_min.append(self.current_min) def top(self): return self.stack[-1] def get_min(self): return self.current_min a = Stack() for i in [10, 2, 5, 4, 6, -1]: a.push(i) a.pop() print(a.top())
Всегда ориентироваться надо на худшую сложность, сложность в худшем случае. Но есть вариации, когда получится лучше, чем мы ожидали. Отсюда худшая и лучшая сложности, все зависит от поступающих данных.
Все что я увидел в коде это ?????? ?????? ?????? ????? .)) вот сижу и думаю а стоит вообще начинать если я не разбираюсь в этом вообще от слова совсем ) и с чего начать_)
Ну я честно не понимаю две вещи: 1. Каким образом человек которого заявляют как сеньора так долго (и так плохо) решал эти задачи 2. Почему после такого собеса человека (судя по заявлениям в видео) взяли, это же даже не уровень стажера
@@artemshumeiko меньше, врать не буду. Но с таким уровнем прохождения алго-задач даже на стажировки в биг тех не берут, там банально развернут на первом этапе. Я понимаю что алгосы это не то что показывает уровень разработчика, но если бы собеседующие так считали - зачем они бы дали вообще эту задачу, да еще и в конце (в конце дают задачи посложнее обычно)
@@tegeranchikrus4389 Бро забей, автор канала очередной инфоцыган, который вместо импрува своих хард скиллов, выбрал дорогу продажи платных курсов и развития канала (это и не плохо и не хорошо, бабки есть бабки). Но очев видно, что чел максимум мид (ито не в каждом даже российском бигтехе). Алгосы с собеса на видео реально самые базированные, буквально литкод грид 75. И можно долго с пеной у рта доказывать, что алгоритмы - это не про грейд, но когда ты не знаешь как работает трейсбек в языке, в котором ты себя называешь сеньором, это нонсенс. Еще насмешило, что автор канала не выдержал критики с твоей стороны и сразу затронул тему с зарплатой, а ведь это говорит о том, что поцанчик то оказывается - полный мудак, раз мерит достижения и компетенцию людей по зарплате. Ам сори за бурный конец.
Смотря для кого. Олимпиадник с такими задачами на изи справится, сеньер, у которого последние 5 лет было решение реальных задач, а не этого бреда, будет закономерно тупить.
Вы реально не знали ответ на эти задачи будучи синьором? Или спецом тупили чтобы не спалил интервьюер? Если первое, то получается такие сложные вопросы или вы не такой хороший синьор?! И как проходить такие собесы челам без опыта?!
По поводу "И как проходить такие собесы челам без опыта?!" - А как проходят собеседования для FANGа ? Есть разные видоскики на Ютубе, где люди рассказывают как они по много месяцев прорешивали задачи на LeetCode + там же можно изучать чужие решения. Через год такой практики вы тоже сможете быстро находить решения под такие задачки на собесах - в подсознании уже накопятся типовые алгоритмические решения.
Push все равно кривой получился. Если до конца списка делать pop, то с какого-то момента не будет значений из упорядоченного списка. Всё из за условия добавления
@@PeterSidoroff там фича в том, что добавление в упорядоченный массив у тебя происходит только при пуше меньшего элемента, т.е. push(1), push(2), push(3), pop() -> 1, pop() -> None т.к. 2 и 3 тупо не добавлялись, оба гения сидят(как сделать пуш за О(1) если там придется по нормальному по всему массиву проходиться чтобы его в нужное место воткнуть не представляю)
🎯 Key points for quick navigation: [00:52] 🛠️ Нехватка типизации и неясность роли предиката, который выглядит как функция из-за своего вызова позднее. [01:19] ⚠️ Некорректное использование изменяемого объекта в качестве значения по умолчанию для аргумента функции. [01:45] 💡 Удаление избыточных строк и оптимизация конструкции для создания объектов. [02:31] 🤔 Функция фильтрует массив объектов, возвращая первый подходящий элемент. [04:04] ⚡️ Оптимизация функции для завершения работы при нахождении первого подходящего элемента. [05:03] 💡 При вызове функции со списком объектов, функция будет возвращать объект, соответствующий первому элементу списка, или None, если подходящего элемента нет. [06:35] 📝 Худшая временная сложность функции O(N), где N - количество элементов в массиве, а лучшая - O(1), если подходящий элемент находится в начале массива. [07:02] 🤖 Длина выполнения алгоритма равна длине N списка. [07:17] 🌟 Задача на собеседовании была легкой, но потребовались подсказки интервьюера. [07:31] 🎁 Получите шпаргалку по алгоритмической сложности в Telegram-канале. [08:11] 🌐 Платформа Solvit поможет вам подготовиться к техническим собеседованиям. [08:55] 🚀 Обязательно пройдите по ссылке в описании и воспользуйтесь платформой Solvit. [09:08] 👨💻 Задача на собеседовании: написать декоратор с параметрами. [10:38] 📝 Функция, принимающая аргументы функции, может использовать ключевое слово args. [12:58] 🤔 Если вы не знаете, как ответить на вопрос, попробуйте начать писать код и решение придет к вам по ходу дела. [13:43] 🤖 Exception в Python может быть от базового класса Object [14:17] 💡 Чтобы обработать исключения, можно использовать конструкцию try...except [14:48] 👀 Для отладки удобно использовать декоратор из функции logging.debug() [16:05] 📝 Сложная задача на проектирование класса, требующего оптимизации алгоритмов [16:45] 📘 Написание класса с методами push, pop, top и getMin за O(1) [17:20] 🤔 Для поиска минимального элемента нужно хранить отдельную переменную и обновлять ее при каждом push [18:18] 💡 Для поиска минимального элемента можно использовать дополнительную переменную, хранящую второе минимальное значение [19:56] 💡 При удалении элемента нужно пересчитать минимальное значение [22:15] 🤔 Для хранения минимального значения одной переменной недостаточно [22:45] 📝 Для обновления минимального значения нужно найти максимальное из двух значений [25:10] 🗣️ Не бойтесь делиться своими мыслями, даже если они ошибочные. Открытость и готовность работать в команде очень важны. [26:01] ⚡️ Стек может быть использован для реализации работы с неограниченным количеством переменных. [27:43] 📈 Возрастающая последовательность чисел может быть использована для создания структуры данных, где новое число добавляется только если оно меньше предыдущего. [28:36] 💪 При удалении элемента из возрастающей последовательности можно не учитывать элементы, которые больше или равны удаляемому. [29:12] 🔄 Элементы в последовательности могут повторяться, что следует учитывать при реализации структуры данных. [30:08] 📝 Для реализации стека можно использовать массив с последним элементом, который будет соответствовать минимальному значению. [32:10] 🗣️ Задавать грамотные вопросы интервьюеру также важно, как и решать задачи. Это показывает вашу заинтересованность и адекватность. Made with HARPA AI
вообще не понял третью задачу. Первое что мне пришло в голову - создать связный список. Добавление - переназначение указателя на вершину на новый, удаление - переназначение указателя на следующий, топ - указатель уже указывает на нужное, get_min можно искать при каждом добавлении элемента в стек или при его удалении(если уадлили минимальный, то нужно найти следующий минимальный), либо если по памяти нам все равно, то создать multi_set и там уже изи все хранить. первое что пришло в голову
эээ а не проще ли через словарь созданный из типов исключений и обработчиков - хватем исключение e и проверяем функцией из первого задания if match:=get_first_matching_object(pred=lambda x:x in ourdict,[type(e)]+list(type(e).__bases__)):match() raise e?
нет) порог входа с каждым разом всё выше, мб раньше джунам нужно было ложкой с первого раз в рот попадать, и их уже брали доучиваться, но сейчас ищут самостоятельных спецов, 2 и 3 задачи вполне адекватные, проверяют твои знания в ООП (не совсем), алгоритмах и структурах данных и основах языка, декораторы используются везде, с ними тоже нужно уметь работать уже на начальных стадиях
полтора гола ежедневной учебы и 100к ваши. На самом деле пох сколько предлагают 50, 70, 100. Если компания норм, то сам факт влиться в структуру и уже расти по грейду это и есть основная цель.
На питоне не пишу, знаю только школьную программу, поехали. 1. Получить первый объект, соответствующий условию предиката. Она создает список, прогоняя объекты через предикат, и возращает первый элемент, если список не пустой 2. Без понятия :D 3. честно говоря, мне такая задача попадалась в одном курсе. Я просто использовал словарь(ключ: число, значение: количество чисел) и стек одновременно: ко всем новым в стеке числам в словаре прибавляется единица. И когда нужно получить минимальный элемент, просто выбираем первый элемент словаря Получается, 1 - правильно, 2 - неправильно, 3 - правильно.
Третье задание примерно на уровне ЕГЭ по информатике. Весьма доступно. Если учащийся сам смог найти решение егэшных задач, а не тупо зубрил шаблонные готовые решения, то третья задача ему вполне должна быть по силам.
Третья задача, которая "Самая сложная", на Сишарпе можно написать оч лего и быстро, минут за 10. Этому меня учили на 1 курсе, а если уже быть Мидл или Джуном, который закончил обучение это максимально изи. Если я будучи на Втором курсе, посмотрел на условие и понял, что в Шарпе "Самую сложную задачу" смогу написать за минут 15-20, т.к. Я еще не Джун и не Мидл
не понял, почему нельзя просто def get_min(self): return min(self.stack) все остальные методы изменяют данные self.stack и метод всегда будет возвращать данные согласно актуальному стеку. Либо я не понял задачу
Последняя задача не до конца решена. 1. Есть бы сделаем push(3), push(6), push(7), pop(3) и запросим get_min, нам отдаст IndexError, хотябы по идеи должен отдать 6. Мы никак не сможем добиться O(1) в get_min, за исключением, если будем постоянно держать в get_min отсортированную коллекцию, но тогда у других операций увеличится Time Complexity.
сможем, например, вот так: class Stack: def __init__(self): self.stack = [] self.mins = [] def push(self, n: int): self.stack.append(n) self.mins.append(min(self.get_min(), n) if self.mins else n) def pop(self) -> int: self.mins.pop() return self.stack.pop() def top(self) -> int: return self.stack[-1] def get_min(self) -> int: return self.mins[-1] и да, решение на видео с ошибкой, в некоторых случаях неправильно сработает.
"One Stack (stack of pair value,minvalue):" def pop(O):return O.s.pop()[0] $$$ def top(O):return O.s[-1][0] $$$ def get_min(O):return O.s[-1][1] $$$ def __init__(O): O.s=[(float('inf'),float('inf'))] $$$ def push(O,v): O.s.append(v,min(v,O.get_min()) # храним в стеке сами значения и его текущий минимум
Приглашаю на мой Практический курс по Backend разработке по всем актуальным технологиям: artemshumeiko.ru
Если это JUNIOR то у меня знания zero.
Ну я бы за 20 минут решил бы задачу, в принципе надо понять задачу
За 2 месяца этого лета у меня прогресс, я решил 1 задачу...
Нормально если ты не изучал каждый день по 8 часов@@funtickgd9502
и таких, как ты, 99% в откликах
@@uvwzyx Каких в откликах?
видео придает уверенности, что сеньоры тоже тупят на собеседовании джуна
Он тупил спецом ))
Это не сеньер явно. 3я задача просто уровень джун джун. Хранить 2 массива, целевой и с отсортированными уникальными значениями, любой реально работающий джун это сделает . 2я хосапде, проверка наследования эксепшена. До перемотки видел что там было if т.е, что произойдет если туда в параметр, а как я понял это массив, передадут 3е или n значение?). Первую ничерта не понял, но видимо потому что питон вижу 1й раз.
Мне жаль рынок ИТ если такие менторят людей в интернете и их слушают. Теперь понятно почему хр не могут найти людей
Это ж из разных сказок джин и сеньор Помидор
@@Rulezzz3 это канал просто принадлежит недосеньору. Нормальный сеньор на собесе не тупит.
причем конкретно :))))
Забавно устроено, что имея многолетний опыт backend разработки (python, php, java), видя задачки на видео, скорее всего школьной или университетской программы, понимаешь что не прошел собеседование на junior позицию
мне кажеться что на таких собесах впервую очередь проверяют твой скилл в технологиях а не задачках.Хотя я не уверен я же не програмист
задача с минимальным элементом в стэке - огонь)
омг) главный скилл на собесах это внимательно слушать вопросы и стараться отвечать именно на них
Третья задача проще декоратора с параметрами эксепшенов. Это же классическая реализация стека.)
Первая легко, третья легчайше для олимпиадника, просто дефолтный стек с префиксным минимумом. А для второй нужно синтаксис подучить
Да тут ЕГЭ уровень
Спасибо за ваш контент! Очень познавательно и полезно! Продолжайте в том же духе!
Пару комментов:
задача 2.
1. Полагаю не стоит использовать isinstance, т.к. есть риск получить проблемы с наследованием при расширении списка передаваемых эксепшенов (например, передали еще LookupError, lambda: print(3)) и получили не ожидаемое поведение). type проверит на точное совпадение.
2. Вызов ex[1]() производится без параметров, что в случае IndexError("bar") выбросит missing required positional argument. Полагаю, это проблема постановки задачи и некоторой не внимательности при выполнении.
3. raise e стоит вынести из условия, иначе ломается логика, если выбрасывается эксепшн не переданный в списке.
задача 3.
1. Использование list говорит, что у нас О(1) будет не совсем честная. Если докапываться, то какой-нибудь связный список - самое то.
2. Для второго списка за счет чуть большего количества памяти можно поддерживать более простую логику (храним список минимумов).
def push(self, num: int) -> None:
self.stack.append(num)
self.min_nums.append(min(lst[-1] if lst else num, num))
def pop() -> int:
self.min_nums.pop()
return self.stack.pop()
Какой джун ? Серьезно ? Хорошо давай задачу для мидл. Я считаю что на позицию джун одолжен быть один вопрос готов ли ты уволится через месяц если не справиться. Все какие задачи и лайвкодинг . Понятно что пару вопросов надо задать чтоб понять в теме человек или нет .
Object в Питоне же зарезервированно, и можно было бы сказать, что не корректно использовать такое название. 😊
то что что то существует в пайтоне - не значит, что оно зарезервировано
object - не зарезервировано, но объект с таким именем существует, но назвать переменную так можно
in, for, class, def, async, await, return, and, or - зарезервированны, такими именами не получится назвать переменные
зарезервирован object, но не Object
@@ogone4ek880 да, но это считается плохой практикой
@@ogone4ek880 Если вы используете object как имя переменной, вы затрудняете доступ к встроенному классу object в текущем контексте. Это может привести к путанице и ошибкам, особенно если ваш код зависит от базового функционала этого класса. Это фундаментальная штука и в коде она была неспроста. Основа основ ООП.
@@unnme2721 и че, я сказал что это незарезервированное имя, а не то что можно свободно так переменные называть
думаю здесь нужно было использовать бинарный поиск так как если у нас нужно цифра или число будет находиться в самом конце то программа будет каждый элемент перебирать
Один из вариантов решения первой задачи:
def get_first_matching_object(predicate, objects):
return next((x for x in objects if predicate(x)), None)
Да проще filter использовать
@@SabFo_ лист компрехеншен выполняется быстрее
@@maximkoltsov9833 Лист компрехеншен создаст список, пройдясь по всем объектам. Это избыточно, как по памяти, так и по времени.
@@saitaro ладно, согласен, ошибся
@@saitaro круглые скобки это не лист компрехеншен а генератор эскпрешн, ленивые вычисления, некст один раз выполнится да и все, дальше эвальюейтится ничего не будет(но понятное дело, что само условие будет проверяться для каждого элемента до первого трушного)
Отлично. Спасибо за собеседование. Покажешь на Ютубе ещё одно с лайв кодингом?
это какой-то новый уровень троллинга)
Почему? Слишком просто для джуниора? Если да, то зачем джуниору знать больше?
@@TheWorld-hs1hf 😂😂😂😂😂
2 месяца лета не зря... 1 задачу я решил, на второй запутался, но по ходу событий понял, что надо было сделать, а в 3 я сразу понял, что надо было сделать, да и сделал
С нуля за два месяца?
Где учился????
@@dllb сам по книгам, примерами алгоритмов, литкоду. Мне на курсах только базу синтаксиса дали
@@funtickgd9502 а какие курсы и книги использовал?
@@funtickgd9502 Помоги, пожалуйста. Вот тоже из скачанных курсов получил базу, но а щас я хз, че мне делать.. Хочу на веб-разраба пойти и по идее до изучения самого django нужно просто решать задачи и так далее, но я вообще не понимаю, где можно было бы подчеркнуть действительно важные и полезные знания ,а где практикой их закрепить.
16:00 в строке 62 мы вызываем коллбек с помощью ex[1](). Это сработает, если у всех коллбеков нет аргументов. Но в предложенном задании у них разные сигнатуры: у коллбека bar() нет аргументов, а у коллбека lambda есть - '_'. Не уверен, но кажется, чтобы это работало, надо перед вызовом коллбека определять, какая у него сигнатура и вызывать его с ожидаемым количеством аргументов. IMO.
P.S.:
или исправить кортеж с анонимной функцией, чтобы она тоже была без параметров (IndexError, lambda : print(2))
Были идеи по решению, но дайти до результата было сложно👍👍👍
Раньше когда слушал других программистов думал, что не дотягиваю даже до +- уровня стажёра, а после просмотра видео понимаю, что я уже сижу на нем точно, а возможно даже ещё годик другой практики и буду Джуном
Я себя отношу к джуну… Ибо изучаю сам все и только лишь полгода))) но эти задачки я бы решил немного по-другому, но в целом контент прикольный) Спасибо))) А декораторы, это очень полезная и хорошая штука!
Решил 1 и 3 (сириус курсы спасибо), декоратор плохо сел в память
3 задача частно на кружках для ол програмирование встречаеться
Спасибо тебе большое, бро. Ты делаешь глупых людей как я чуточку умнее.
это куда такие собесы? очень хотелось бы
Для меня сложно было второе. В третьем сразу понял что нужно параллельно сортированный список создавать при инициализации и добавлять в нужное место новый при пуше
Так много комментариев, что задачи легчащие и не тянут даже на стажера и так мало комментариев, что третья задача решена не верно, точнее не для всех случаев)
Видимо эти комментаторы только во сне разработчики)
Я вот заметил, но правильное решение за константное время так и не придумал. Интересно, а на собесе это заметили или нет?
Может написал бы сначала для каких случаев это будет неправильно прежде чем пизд*ть?
Никто не написал про ваш сайт - отличный инструмент для подготовки к собеседованию! Подольше бы он оставался бесплатным!
Решение у задачи 3 сломается. Например, если запушить 323, а потом достать два последних элемента. В стеке останется 3, а список мин элементов будет пустой. Решение: вместо двух массивов сделать один двумерный. При каждом push в него будет добавляться: [добавленный элемент,мин элемент на момент добавления]
Почему список останется пустой? При пуше первой тройки в него добавится тройка по условию not mins, потом при втором пуше добавится двойка т.к она меньше последнего элемента списка т.е тройки которую мы добавили. При пуше последней тройки в список ниче не добавится. В итоге в стеке 323 а в списке 32. Первый пуп удаляет тройку из стека и ниче не удаляет из списка, второй удаляет двойку везде, третий удаляет двойку везде. Все ок
Ну а с двумерным впринципе тоже думаю будет работать
@@HeppygroupDifermen да, моя ошибка, на 323 сработает. Но на 222 все же сломается. А на 322 будет неверный ответ
@@billykid8678 там он потом исправил код и при 222 список min тоже будет 222
У меня только на одну задачу ушло бы 30-40 минут. Сколько бы я не нарешивал эти задачи, я не могу решать их быстро
в первой задаче не нужно разделять худший/лучший случай, строго говоря - твой ответ некорректный, правильный - просто О(N), но для джуна норм
на 12:09 копирует и спрашивает у нейросети :)
вообще pop из-за структуры данных лист, не будет работать. так как лист требует сдвига, это медленно. и top тоже кстати будет медленный иногда из за переаллокации
нужно создавать всего три связных списка, один чтобы работал pop а другой чтобы работал top
только недавно увидел аналогичную задачу про это) изначально офигевал как можно такое сделать.
задача была - что то про нахождения минимальной суммы для каждой подстроки в K элементов в массиве
аналогичным образом делается
Оскорбительно у людей такое спрашивать. Данная задача решается за 20-40 секунд ( с учётом написание кода ) Я считаю на такой вакансии куда важней понять есть у человека инженерное мышление. Может ли он понять что написанно в коде и его знание английского языка.
Так , все, иду работать в пятерочку . Чему я научился за месяц хз.
Я почему то думал что Джунам сложнее вопросы задают, я знаю почти всё что было на собесе из видео, но я до сих пор не нашел работу, может я что-то делаю не так. Хотя у меня и собеса никогда не было :). Видео придало мне уверенности в своих знаниях, надеюсь скоро найду работу
Сколько учишься уже?
А на какое количество вакансий ты отправлял резюме? Сейчас на джунов высокая конкуренция, поэтому надо просто часами сидеть на сервисах поиска работы и закидывать своё резюме везде где можешь
так это база, тут ничего трудного нет
@@gggppp228какие шансы джуну устроится на удаленку ?
Я немного не понял, но получается что в min_nums будут добавляться не все числа? разве за этим не последует ситуация когда get_min даст неверное значение, вроде 4 5 1 1, список минимумов заполнится единицами, а когда их обе вытолкнут, то get_min ничего не вернет?
Я тоже запутался но потом понял что здесь в стек числа добавляются с права и убираются справа. В этом случае если число не добавляется в min_nums то оно там и не нужно, ведь его удалят прежде чем справа останется минимальное число)
@@Marlo-Smileерунда
@@anton6643 Поясни
Первые две задачи без комментариев - там ничего сложного. 3-я задача встречалась в нескольких курсах по алгоритмам и структурам данных, поэтому если знаешь, то реализовать ее тоже не составляет большого труда.
Не могу не спросить)) а что за тема редактора которым они шеряться?
Monokai чуть другой, этот приятнее
Помоему в первой задаче можно было сделать бинарный поиск
Не имея опыта работы с decorator, 3ье задание показалось намного проще)))
Честный отзыв! Если честно не тянешь на senior разработка очень слабо, на middle специалиста еще можно !
Сеньор - это не про классное решение алгоритмических задач с собеседования
Очень хорошее видео, прям как гора с плеч.
Третья задача это 155 с литкода, не? Кстати, что лучше на собесе делать если встретил задачу к которой знаешь решение? Прикинутся что видишь её в первый раз или признаться что знаешь?
Конечно прикинуться, что не знаешь)
Интересное видео. Я (пытаюсь) писать игры и программы на Годот и там язык в некотором роде схож с питоном, но захотелось глянуть что тут.
Половину слов и понятий не знаю, поэтому хотелось бы задать вопрос по последней задаче. Если нужен минимальный элемент массива, то зачем создавать массив из предыдущих его значений?
И что значит "за постоянное время"? В решении не заметил какого-либо уравнённого значения скорости выполнения функций 🤔
Постоянное время - оно же константное, оно же O(1). Что бы нормально это понять лучше почитать простую книжку по алгоритмам. Можно начать с "Грокаем алгоритмы".
Конкретно здесь:
Если не было бы ограничения на постоянное время, get_min() мог бы просто возвращать встроенную min(self.stack), а она работает за линейное время. Если написать свою реализацию min, то это сразу видно: чтобы найти минимальный элемент придётся перебрать все элементы, то есть в худшем случае минимальный элемент будет последним, и в среднем время поиска линейно зависит от длины последовательности.
В отличии от операций push, pop, top: когда мы в конец просто добавляем / удаляем элемент, это не зависит от размера последовательности (на самом деле там есть подводные камни про перевыделение памяти при увеличении размера).
В реализации за постоянное время и есть смысл задачи.
Артем сразу это упоминает на 18:01.
@@ЯнПацюпа Спасибо, вроде бы понял. А что даёт -1 в номере индекса элемента массива? (Или это не оно?)
Я так понимаю последнее значение переменной из массива, да?
@@droidnah Да, это последний элемент. Это стандартный способ в Python, он поддерживает отрицательные индексы, можно вообще посмотреть на срезы - они очень удобные)
@@ЯнПацюпа спасибо большое за ответы, теперь догнал суть 😁
@@droidnah Рад слышать. Вообще если есть желание поплотнее посмотреть на Python, можно для этого взять книжку Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация данных, веб-приложения (Eric Matthes. Python Crash Course). Там как раз первый проект второй части - это игра на pygame (первая часть - основы Python), правда алгоритмов там нет
А точно ли у джуна нужно спрашивать алгоритмическую сложность? Это точно вопрос по грейду? А? а? А?
"One Stack (stack of pair value,minvalue):"
def pop(O):return O.s.pop()[0] $$$ def top(O):return O.s[-1][0] $$$ def get_min(O):return O.s[-1][1] $$$ def __init__(O): O.s=[(float('inf'),float('inf'))] $$$ def push(O,v): O.s.append(v,min(v,O.get_min())
# храним в стеке сами значения и его текущий минимум
Блин даже первая задача вызвала звон в голове...
Прорвемся, готовимся дальше)))
в защиту автора видео хочу сказать, что на собеседовании очень сильный стресс и даже такие легкие задачи как первая могут вогнать в ступор, так как очень много нервов мешает думать. Это надо прокачивать скилл прохождения собеседований, чтобы на них не переживать
Если это Senior то в отличие от Джуна воспользуется chat gpt
3 задача решена неверно)
Очевидно, про принцип kiss в этой конторе не слышали.
Знания АСД помогли решить третью задачу в первые 4 секунды после ее прочтения
что это?
@@knowledgedose1956 алгоритмы и структуры данных
@@knowledgedose1956 Абстрактно синтаксическое дерево, полагаю
@@knowledgedose1956дисциплина "алгоритмы и структуры данных"
Привет, мне очень нравятся твои видео, можешь ли ты пожалуйста в одном из следующих видео рассказать как сделать онлайн оплату чего либо
3:09 Всегда хочеться треснуть чем-то тяжелым тех кто в одну строку пишет много операторов, как это в строке 2 и 9. Код в первую очередь должен быть визуально легко читаем, потому что читаем код мы чаще чем пишем, экономия количества строк не дает преймуществ, кроме демонтрации умственных отклонений автора подобного кода.
33 минуты боли, но увы без этого никуда, сразу вспомнил все свои тупняки))
Кому интересно, вот такой код у меня получился на последний вопрос.
class Stack:
def __init__(self):
self.stack = []
self.pref_min = []
self.current_min = None
def pop(self):
self.stack.pop()
self.pref_min.pop()
self.current_min = self.pref_min[-1]
def push(self, num):
self.stack.append(num)
self.current_min = min(
self.pref_min[-1], num) if self.pref_min else num
self.pref_min.append(self.current_min)
def top(self):
return self.stack[-1]
def get_min(self):
return self.current_min
a = Stack()
for i in [10, 2, 5, 4, 6, -1]:
a.push(i)
a.pop()
print(a.top())
Не понял момент с худшей O(1) и лучшей O(n). Откуда вдруг взялось две сложности?
Всегда ориентироваться надо на худшую сложность, сложность в худшем случае. Но есть вариации, когда получится лучше, чем мы ожидали. Отсюда худшая и лучшая сложности, все зависит от поступающих данных.
Все что я увидел в коде это ?????? ?????? ?????? ????? .)) вот сижу и думаю а стоит вообще начинать если я не разбираюсь в этом вообще от слова совсем ) и с чего начать_)
Ты же сеньор как можно было так на первом затупить с возвращаемым значением)
третья задача развалится, когда в список залетят два одинаковых числа и оба будут минимальными
Нет, так как там при пуше "меньше либо равно" оба числа добавятся в стек минимумов, при попе так же будут выниматься.
Ну я честно не понимаю две вещи:
1. Каким образом человек которого заявляют как сеньора так долго (и так плохо) решал эти задачи
2. Почему после такого собеса человека (судя по заявлениям в видео) взяли, это же даже не уровень стажера
Вам виднее, наверняка 500к зарабатываете?
@@artemshumeiko меньше, врать не буду. Но с таким уровнем прохождения алго-задач даже на стажировки в биг тех не берут, там банально развернут на первом этапе. Я понимаю что алгосы это не то что показывает уровень разработчика, но если бы собеседующие так считали - зачем они бы дали вообще эту задачу, да еще и в конце (в конце дают задачи посложнее обычно)
Кстати в защиту собеседуемого стоит заметить что с декоратором вроде быстро все получилось, мое почтение
@@tegeranchikrus4389 Бро забей, автор канала очередной инфоцыган, который вместо импрува своих хард скиллов, выбрал дорогу продажи платных курсов и развития канала (это и не плохо и не хорошо, бабки есть бабки). Но очев видно, что чел максимум мид (ито не в каждом даже российском бигтехе). Алгосы с собеса на видео реально самые базированные, буквально литкод грид 75. И можно долго с пеной у рта доказывать, что алгоритмы - это не про грейд, но когда ты не знаешь как работает трейсбек в языке, в котором ты себя называешь сеньором, это нонсенс. Еще насмешило, что автор канала не выдержал критики с твоей стороны и сразу затронул тему с зарплатой, а ведь это говорит о том, что поцанчик то оказывается - полный мудак, раз мерит достижения и компетенцию людей по зарплате. Ам сори за бурный конец.
Подскажите, я пайтон больше года не ковырял, в 3 задаче почему просто по стеку нельзя get min пробежаться? Долго?
Да, долго. Получится O(n), а нужно O(1)
@@artemshumeiko да, алгоритмы я так и не понял тогда
Спс
можно бригаду. это спецом сеньор так тупит? или реально? или постановка?
Смотря для кого. Олимпиадник с такими задачами на изи справится, сеньер, у которого последние 5 лет было решение реальных задач, а не этого бреда, будет закономерно тупить.
Это фейковый сеньор
По голосу интервьювера, ему лет 17-19, если это так, мне значит немного стыдно 😢
Не, точно больше
Вы реально не знали ответ на эти задачи будучи синьором? Или спецом тупили чтобы не спалил интервьюер? Если первое, то получается такие сложные вопросы или вы не такой хороший синьор?! И как проходить такие собесы челам без опыта?!
В маленькой компании синьором можно стать имея год опыта.
По поводу "И как проходить такие собесы челам без опыта?!" - А как проходят собеседования для FANGа ? Есть разные видоскики на Ютубе, где люди рассказывают как они по много месяцев прорешивали задачи на LeetCode + там же можно изучать чужие решения. Через год такой практики вы тоже сможете быстро находить решения под такие задачки на собесах - в подсознании уже накопятся типовые алгоритмические решения.
@@PeterSidoroff, целый год тратить на алгосы) звучит жестко
@@vor6758 в гугл по алгосам чтоб попасть надо их лет пять на олимпиадах применять, в среднем :-)
@@vor6758кто-то всю жизнь на них тратит :)
Почему 3 задача проще 2?
Молодец, ты конечно достоин
Push все равно кривой получился. Если до конца списка делать pop, то с какого-то момента не будет значений из упорядоченного списка. Всё из за условия добавления
Для этого есть условие в pop:
if res == self.min_nums[-1]
Нет, там правильно. В push-е стоит условие на пустой массив мин.чисел и на возможное совпадение с текущим мин.числом (
@@PeterSidoroff там фича в том, что добавление в упорядоченный массив у тебя происходит только при пуше меньшего элемента, т.е. push(1), push(2), push(3), pop() -> 1, pop() -> None т.к. 2 и 3 тупо не добавлялись, оба гения сидят(как сделать пуш за О(1) если там придется по нормальному по всему массиву проходиться чтобы его в нужное место воткнуть не представляю)
@@QKekos в вашем случае при вызове pop() удалится 3, потом 2. А 1 так и будет минимальным числом в стеке.
class Stack:
def __init__(self):
self.stack = []
self.min_num = None
def push(self, item: int):
self.stack.append(item)
self.min_num = min(self.stack)
def pop(self):
res = self.stack.pop()
if res == self.min_num:
self.min_num = min(self.stack)
def top(self):
return self.stack[-1]
def get_min(self):
return self.min_num
Условие перечитай)
А нельзя было написать Filter(predicate, object) ?
И что делать потом с этим фильтром?
@@saitaro что-то аля try next(objects) except StopIteration
Жестко. Я ни одной не знаю😢
Ты не один друг, я тоже почувствовал себя тупым
🎯 Key points for quick navigation:
[00:52] 🛠️ Нехватка типизации и неясность роли предиката, который выглядит как функция из-за своего вызова позднее.
[01:19] ⚠️ Некорректное использование изменяемого объекта в качестве значения по умолчанию для аргумента функции.
[01:45] 💡 Удаление избыточных строк и оптимизация конструкции для создания объектов.
[02:31] 🤔 Функция фильтрует массив объектов, возвращая первый подходящий элемент.
[04:04] ⚡️ Оптимизация функции для завершения работы при нахождении первого подходящего элемента.
[05:03] 💡 При вызове функции со списком объектов, функция будет возвращать объект, соответствующий первому элементу списка, или None, если подходящего элемента нет.
[06:35] 📝 Худшая временная сложность функции O(N), где N - количество элементов в массиве, а лучшая - O(1), если подходящий элемент находится в начале массива.
[07:02] 🤖 Длина выполнения алгоритма равна длине N списка.
[07:17] 🌟 Задача на собеседовании была легкой, но потребовались подсказки интервьюера.
[07:31] 🎁 Получите шпаргалку по алгоритмической сложности в Telegram-канале.
[08:11] 🌐 Платформа Solvit поможет вам подготовиться к техническим собеседованиям.
[08:55] 🚀 Обязательно пройдите по ссылке в описании и воспользуйтесь платформой Solvit.
[09:08] 👨💻 Задача на собеседовании: написать декоратор с параметрами.
[10:38] 📝 Функция, принимающая аргументы функции, может использовать ключевое слово args.
[12:58] 🤔 Если вы не знаете, как ответить на вопрос, попробуйте начать писать код и решение придет к вам по ходу дела.
[13:43] 🤖 Exception в Python может быть от базового класса Object
[14:17] 💡 Чтобы обработать исключения, можно использовать конструкцию try...except
[14:48] 👀 Для отладки удобно использовать декоратор из функции logging.debug()
[16:05] 📝 Сложная задача на проектирование класса, требующего оптимизации алгоритмов
[16:45] 📘 Написание класса с методами push, pop, top и getMin за O(1)
[17:20] 🤔 Для поиска минимального элемента нужно хранить отдельную переменную и обновлять ее при каждом push
[18:18] 💡 Для поиска минимального элемента можно использовать дополнительную переменную, хранящую второе минимальное значение
[19:56] 💡 При удалении элемента нужно пересчитать минимальное значение
[22:15] 🤔 Для хранения минимального значения одной переменной недостаточно
[22:45] 📝 Для обновления минимального значения нужно найти максимальное из двух значений
[25:10] 🗣️ Не бойтесь делиться своими мыслями, даже если они ошибочные. Открытость и готовность работать в команде очень важны.
[26:01] ⚡️ Стек может быть использован для реализации работы с неограниченным количеством переменных.
[27:43] 📈 Возрастающая последовательность чисел может быть использована для создания структуры данных, где новое число добавляется только если оно меньше предыдущего.
[28:36] 💪 При удалении элемента из возрастающей последовательности можно не учитывать элементы, которые больше или равны удаляемому.
[29:12] 🔄 Элементы в последовательности могут повторяться, что следует учитывать при реализации структуры данных.
[30:08] 📝 Для реализации стека можно использовать массив с последним элементом, который будет соответствовать минимальному значению.
[32:10] 🗣️ Задавать грамотные вопросы интервьюеру также важно, как и решать задачи. Это показывает вашу заинтересованность и адекватность.
Made with HARPA AI
это только в России програмисту платят 1 тыс $ ?
вообще не понял третью задачу. Первое что мне пришло в голову - создать связный список. Добавление - переназначение указателя на вершину на новый, удаление - переназначение указателя на следующий, топ - указатель уже указывает на нужное, get_min можно искать при каждом добавлении элемента в стек или при его удалении(если уадлили минимальный, то нужно найти следующий минимальный), либо если по памяти нам все равно, то создать multi_set и там уже изи все хранить. первое что пришло в голову
хех, одно дело вещать по подготовленному сценарию, а другое дело в realtime. Хорошо порешал
ну так декораторы с параметрами писали во втором пайтоне, изращение, уже как 10 лет можно проще
эээ а не проще ли через словарь созданный из типов исключений и обработчиков - хватем исключение e и проверяем функцией из первого задания
if match:=get_first_matching_object(pred=lambda x:x in ourdict,[type(e)]+list(type(e).__bases__)):match()
raise e?
Читаемость огонь.
каждый раз искать минимум массива?
Не знаю ответ ни на одну задачу. Учусь питону уже второй день.
Я тупой, надо бросать?
Ахах, за 22 дня ты не сможешь этот собес пройти. Это серьзная работа, нужно много времени потратить, чтобы научиться.
Бросай
@@digitaIdevil хорошо, пошёл бросать
@@SaintVes 🤣🤣
@@SaintVesскажи, куда бросил? Просто так спрашиваю
Прикол конечно. Такие задачи могут на мидла и синьера дать, с зп в 2-4 раза больше
Угораешь? Я даже не джун это решаю
@@irwynptytzelow молодец, что сказать то тут) но я тут оффер на 300к получил без решения подобных задач, так что точно знаю о чем говорю)
это явно не уровень джуна и не 100 тысяч зп, первая задача только, остальные уровня мидл
нет) порог входа с каждым разом всё выше, мб раньше джунам нужно было ложкой с первого раз в рот попадать, и их уже брали доучиваться, но сейчас ищут самостоятельных спецов, 2 и 3 задачи вполне адекватные, проверяют твои знания в ООП (не совсем), алгоритмах и структурах данных и основах языка, декораторы используются везде, с ними тоже нужно уметь работать уже на начальных стадиях
Что задачи, что вопросы это уровень стажера
@@myacc2517 может сразу уровень школьника начальных классов?
@@ChrisColeDC Первая задача сравнима с заданием на егэ, вторая и третья это основа основ
Если для вас эти задачи на мидлов, то у меня плохие новости
@@myacc2517 чел ты сейчас автора видео дураком выставил)))
Плохо ты претворялся друг ), джун тупит страшнее
у чела было на мидла собеседование в два раза легче
это не джуновская задача
А дядя смог вам объяснить как это пригодится при написании реальных задач с REST и бизнес логикой?
Очевидно, что никак
выходит у меня в 16 лет уровень джуниор? и зачем мне в универ поступать тогда...
почемуто 3 задача показалась самой прстой)
полтора гола ежедневной учебы и 100к ваши. На самом деле пох сколько предлагают 50, 70, 100. Если компания норм, то сам факт влиться в структуру и уже расти по грейду это и есть основная цель.
На питоне не пишу, знаю только школьную программу, поехали.
1. Получить первый объект, соответствующий условию предиката. Она создает список, прогоняя объекты через предикат, и возращает первый элемент, если список не пустой
2. Без понятия :D
3. честно говоря, мне такая задача попадалась в одном курсе. Я просто использовал словарь(ключ: число, значение: количество чисел) и стек одновременно: ко всем новым в стеке числам в словаре прибавляется единица. И когда нужно получить минимальный элемент, просто выбираем первый элемент словаря
Получается, 1 - правильно, 2 - неправильно, 3 - правильно.
знаю только школьную программу... мне такая задача попадалась в одном курсе.
@@Forarit Я знаю только школьную программу питона, курс был про другое
Тут третья задача не про подсчет элементов, да и нет такого понятия как «первый элемент словаря»
@@shehamane3518 В словаре элементы отсортированы, я подразумеваю первым элементом минимальный. Про подсчёт, не про подсчёт, но задача решена
Ты же не синьор явно
Это понятие в принципе расплывчатое. В одной конторе ты джун, в другой сениор 😂
Третье задание примерно на уровне ЕГЭ по информатике. Весьма доступно. Если учащийся сам смог найти решение егэшных задач, а не тупо зубрил шаблонные готовые решения, то третья задача ему вполне должна быть по силам.
get_first_matching_object=lambda pred,obj=[]:next((v for v in obj if pred(v)),None)
Третья задача, которая "Самая сложная", на Сишарпе можно написать оч лего и быстро, минут за 10. Этому меня учили на 1 курсе, а если уже быть Мидл или Джуном, который закончил обучение это максимально изи. Если я будучи на Втором курсе, посмотрел на условие и понял, что в Шарпе "Самую сложную задачу" смогу написать за минут 15-20, т.к. Я еще не Джун и не Мидл
не понял, почему нельзя просто
def get_min(self):
return min(self.stack)
все остальные методы изменяют данные self.stack и метод всегда будет возвращать данные согласно актуальному стеку.
Либо я не понял задачу
Требуется решить за постоянное время, а у Вас O(n)
Потому что эта функция занимает O(n) времени, а нужно O(1)
Мне кажется, что это совсем не для джуна, а на стажёра какого - нибудь. Уж слишком просто
Это рофел?
@@goldgold594, нет
Когда решалась вторая задача, увидел обучающую структуру Сергея Балакирева по декораторам. wraps, wrapper, res))
это не только у него если что
@@w3st-1337 ЕСЛИ ЧТО ВИДЕЛ У НЕГО
Последняя задача не до конца решена.
1. Есть бы сделаем push(3), push(6), push(7), pop(3) и запросим get_min, нам отдаст IndexError, хотябы по идеи должен отдать 6.
Мы никак не сможем добиться O(1) в get_min, за исключением, если будем постоянно держать в get_min отсортированную коллекцию, но тогда у других операций увеличится Time Complexity.
сможем, например, вот так:
class Stack:
def __init__(self):
self.stack = []
self.mins = []
def push(self, n: int):
self.stack.append(n)
self.mins.append(min(self.get_min(), n) if self.mins else n)
def pop(self) -> int:
self.mins.pop()
return self.stack.pop()
def top(self) -> int:
return self.stack[-1]
def get_min(self) -> int:
return self.mins[-1]
и да, решение на видео с ошибкой, в некоторых случаях неправильно сработает.
@@pavelosipov5951 def pop() у тебя неверно работает
так это же стэк, мы можем удалить из него тока последнее число
"One Stack (stack of pair value,minvalue):"
def pop(O):return O.s.pop()[0] $$$ def top(O):return O.s[-1][0] $$$ def get_min(O):return O.s[-1][1] $$$ def __init__(O): O.s=[(float('inf'),float('inf'))] $$$ def push(O,v): O.s.append(v,min(v,O.get_min())
# храним в стеке сами значения и его текущий минимум
@@pavelosipov5951 И правда, что-то я ошибся. Спасибо за разъяснение.
20:55
def get_min(self):
return min(self.stack) if self.stack else None, надеюсь так будет,ибо я тупой совсем
А так разве нельзя было сделать? или я чего то не понимаю?
по времени это занимает O(n), т.к. нужно пройтись по всему массиву и найти минимальное. Спрашивалось более оптимальное решение
это троллинг? слишком сложно для JUNIOR
Когда-то это было так, сейчас некоторые пишут, что это даже не уровень стажера, ибо конкуренция растёт
@@TheWorld-hs1hf да не, бред же, сейчас очень сильно не хватает спецов в РФ
@@helish_88 да, но это не мешает им так делать. Сам глянь другие свежие собеседования