3-ий вопрос:
Что может быть ключом в словаре?
Ответить можно, что ключом может быть неизменяемый тип.
Почему?
Дело в том, что если у нас будет 2 ключа - списки, тогда теоретически мы сможем их изменить до одинакового состояния и у нас в словаре получится 2 одинаковых ключа, таким образом когда мы попытаемся по ключу достать значение, словарь не будет знать, что нам вернуть.
Может ли кортеж или другой контейнерный тип быть ключом в словаре?
Ответ тут будет и да и нет.
Если у нас будет кортеж, в котором будут только неизменяемые переменные, например:
(1, "my_str", (1, 2)) - то, все ок, он может быть ключом.
Но если у нас будет кортеж, в котором будет хоть один изменяемый тип, то он уже не сможет быть ключом в словаре, например:
(1, "my_str", [1, 2]) - содержит список, и не может быть ключом.
Чтобы очевидно проверить, может ли какая-то переменная быть ключом в словаре, надо попробовать взять у неё hash, если можно будет, то ок, если нельзя, то значит нельзя.
Поэтому можно ответить, что ключом в словаре может быть все, у чего можно взять хэш.
все вопросы
#ps_question
Что может быть ключом в словаре?
Ответить можно, что ключом может быть неизменяемый тип.
Почему?
Дело в том, что если у нас будет 2 ключа - списки, тогда теоретически мы сможем их изменить до одинакового состояния и у нас в словаре получится 2 одинаковых ключа, таким образом когда мы попытаемся по ключу достать значение, словарь не будет знать, что нам вернуть.
Может ли кортеж или другой контейнерный тип быть ключом в словаре?
Ответ тут будет и да и нет.
Если у нас будет кортеж, в котором будут только неизменяемые переменные, например:
(1, "my_str", (1, 2)) - то, все ок, он может быть ключом.
Но если у нас будет кортеж, в котором будет хоть один изменяемый тип, то он уже не сможет быть ключом в словаре, например:
(1, "my_str", [1, 2]) - содержит список, и не может быть ключом.
Чтобы очевидно проверить, может ли какая-то переменная быть ключом в словаре, надо попробовать взять у неё hash, если можно будет, то ок, если нельзя, то значит нельзя.
Поэтому можно ответить, что ключом в словаре может быть все, у чего можно взять хэш.
все вопросы
#ps_question
🔥5👍1
Сегодня разберем вторую задачу из порядка 300, которые необходимо решить)
2. Сontains duplicate (легкая)
leetcode.com/problems/contains-duplicate
Дан список чисел nums, если все числа в списке уникальны, то надо вернуть False, а если хоть одно число повторяется, то надо вернуть True.
Пример 1:
Input: nums = [1,2,3,1]
Output: true
Пример 2:
Input: nums = [1,2,3,4]
Output: false
Пример 3:
Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
2. Сontains duplicate (легкая)
leetcode.com/problems/contains-duplicate
Дан список чисел nums, если все числа в списке уникальны, то надо вернуть False, а если хоть одно число повторяется, то надо вернуть True.
Пример 1:
Input: nums = [1,2,3,1]
Output: true
Пример 2:
Input: nums = [1,2,3,4]
Output: false
Пример 3:
Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
👍3
4-ий вопрос:
В чем разница между списком и словарем?
Список в python это массив данных, словарь, это ключ-значение. Можно провести аналогию, что в словаре это ключ-значение, а список - это индекс-значение. Разница в сложности вставки элемента в список/словарь, удаления и поиска.
Сложность поиска элемента в списке - O(n), в словаре O(1). Но тут надо уточнить, что если мы хотим получить элемент из списка по индексу, то сложность будет O(1), т.к. в памяти компьютера элементы списка находятся подряд и python знает на сколько надо сделать сдвиг, чтобы попасть на нужный элемент.
Чтобы найти элемент в списке в худшем случае мы пройдемся по всему списку, размером n, значит сложность будет О(n).
Но чтобы найти ключ в словаре и получить по нему значение, надо ключ пропустить через хэш функцию, которая вернет что-то похожее на индекс таблички, где хранятся значения и уже по этому индексу мы получим значение, которое привязано к ключу. Сложность всего этого О(1).
Чтобы вставить элемент в список, т.к. в памяти значения идут подряд, надо вставить элемент и все остальные сдвинуть на 1. Получается, что если мы вставим значение в начало списка, то надо будет сделать n операций, чтобы подвинуть все элементы. Сложность О(n). Сложность ставки в словарь - О(1), то есть просто пропускаем ключ через хэш функцию и устанавливаем значение в нужную ячейку.
Про удаление из списка уже можно догадаться, что в словаре пропускаем через хэш ф-ию ключ и удаляем ненужный элемент, сложность О(1). А в списке, если мы удалим элемент в начале списка, то все элементы надо будет сдвинуть, чтобы убрать пробел, сложность О(n).
Как правило так подробно рассказывать не нужно, но знать надо, обычно достаточно сказать, что у списка сложность О(n), а словаря О(1)
все вопросы
#ps_question
В чем разница между списком и словарем?
Список в python это массив данных, словарь, это ключ-значение. Можно провести аналогию, что в словаре это ключ-значение, а список - это индекс-значение. Разница в сложности вставки элемента в список/словарь, удаления и поиска.
Сложность поиска элемента в списке - O(n), в словаре O(1). Но тут надо уточнить, что если мы хотим получить элемент из списка по индексу, то сложность будет O(1), т.к. в памяти компьютера элементы списка находятся подряд и python знает на сколько надо сделать сдвиг, чтобы попасть на нужный элемент.
Чтобы найти элемент в списке в худшем случае мы пройдемся по всему списку, размером n, значит сложность будет О(n).
Но чтобы найти ключ в словаре и получить по нему значение, надо ключ пропустить через хэш функцию, которая вернет что-то похожее на индекс таблички, где хранятся значения и уже по этому индексу мы получим значение, которое привязано к ключу. Сложность всего этого О(1).
Чтобы вставить элемент в список, т.к. в памяти значения идут подряд, надо вставить элемент и все остальные сдвинуть на 1. Получается, что если мы вставим значение в начало списка, то надо будет сделать n операций, чтобы подвинуть все элементы. Сложность О(n). Сложность ставки в словарь - О(1), то есть просто пропускаем ключ через хэш функцию и устанавливаем значение в нужную ячейку.
Про удаление из списка уже можно догадаться, что в словаре пропускаем через хэш ф-ию ключ и удаляем ненужный элемент, сложность О(1). А в списке, если мы удалим элемент в начале списка, то все элементы надо будет сдвинуть, чтобы убрать пробел, сложность О(n).
Как правило так подробно рассказывать не нужно, но знать надо, обычно достаточно сказать, что у списка сложность О(n), а словаря О(1)
все вопросы
#ps_question
🔥4👍2
Как видно знание хэш таблиц жизненно необходимо, чтобы продержаться на собеседовании первые 5 минут).
Поэтому про них будет отдельный пост и тут мы уже затронули сложность алгоритмов, про них тоже в ближайшее время сделаю отдельный пост. Тема сложности алгоритмов на самом деле простая, если мы её будем разбирать с точки зрения собеседований и литкод задач.
Поэтому про них будет отдельный пост и тут мы уже затронули сложность алгоритмов, про них тоже в ближайшее время сделаю отдельный пост. Тема сложности алгоритмов на самом деле простая, если мы её будем разбирать с точки зрения собеседований и литкод задач.
👍5
Воскресная задачка.
3. Valid Anagram (легкая)
leetcode.com/problems/valid-anagram
Имеется 2 строки s и t, вернуть True, если t является анаграммой s и False в противном случае.
Анаграмма - это слово или фраза образованная путем перестановки букв другого слова или фразы обычно с использованием всех исходных букв ровно 1 раз.
Пример 1:
Input: s = "anagram", t = "nagaram"
Output: true
Пример 2:
Input: s = "rat", t = "car"
Output: false
def isAnagram(s, t):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
3. Valid Anagram (легкая)
leetcode.com/problems/valid-anagram
Имеется 2 строки s и t, вернуть True, если t является анаграммой s и False в противном случае.
Анаграмма - это слово или фраза образованная путем перестановки букв другого слова или фразы обычно с использованием всех исходных букв ровно 1 раз.
Пример 1:
Input: s = "anagram", t = "nagaram"
Output: true
Пример 2:
Input: s = "rat", t = "car"
Output: false
def isAnagram(s, t):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
👍3
Мы уже начали заходить в тупик, т.к. измерение сложности алгоритмов сопровождает программиста повсюду (при работе). Поэтому пришло время разобрать, что это такое, чтобы комфортно двигаться дальше.
Сложность алгоритмов (О большое)
Сложность алгоритмов (О большое)
Telegraph
Сложность алгоритмов (О большое)
Обычно, когда на собеседовании просят сказать сложность того или иного алгоритма, то имеется ввиду О большое или big O. О большое - говорит о том, какая сложность вашего алгоритма в худшем случае. Теперь перейдем к тому, что такое это О, и что такое сложность…
🔥10
Воскресная задачка.
4. Top K Frequent Elements (средняя)
leetcode.com/problems/top-k-frequent-elements
Имеется список чисел nums, необходимо вернуть k наиболее часто встречающихся элементов. Порядок не важен.
Пример 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Пример 2:
Input: nums = [1], k = 1
Output: [1]
def topKFrequent(nums, k):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
*задачи среднего уровня, если показалась сложной, это вполне нормально
Список всех задач
#ps_leetcode
4. Top K Frequent Elements (средняя)
leetcode.com/problems/top-k-frequent-elements
Имеется список чисел nums, необходимо вернуть k наиболее часто встречающихся элементов. Порядок не важен.
Пример 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Пример 2:
Input: nums = [1], k = 1
Output: [1]
def topKFrequent(nums, k):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
*задачи среднего уровня, если показалась сложной, это вполне нормально
Список всех задач
#ps_leetcode
🔥4❤1
Методы для работы со списками.
Подумайте, какая может быть сложность у каждого метода и напишите, у каких методов сложность О(1) или может быть О(1) при определенных условиях.
Оглавление
#ps_base
Подумайте, какая может быть сложность у каждого метода и напишите, у каких методов сложность О(1) или может быть О(1) при определенных условиях.
Оглавление
#ps_base
🔥6
Чтобы подготовиться к завтрашней задаче, надо разобраться, что такое стек.
Стек
Подумайте, как можно реализовать стек из того, что мы уже знаем? Можно конечно написать свой класс и реализовать все эти методы, а информацию как-то хранить внутри. Но классы ещё не проходили, как без них реализовать?
Ещё учтите, что все операции со стеком должны производиться за О(1).
Стек
Подумайте, как можно реализовать стек из того, что мы уже знаем? Можно конечно написать свой класс и реализовать все эти методы, а информацию как-то хранить внутри. Но классы ещё не проходили, как без них реализовать?
Ещё учтите, что все операции со стеком должны производиться за О(1).
Telegraph
Стек
Стек, это контейнерная структура данных, каждая ячейка которого может содержать любые данные или ссылку на какие-то данные, как и список. Стек не представлен в python как отдельная структура данных, поэтому её как правило надо создавать самому. Философия…
🔥4
Воскресная задачка.
5. Valid Parentheses (легкая)
leetcode.com/problems/valid-parentheses
Получаем строку s, содержащую только символы '(', ')', '{', '}', '[' и ']', определите, валидна ли эта строка.
Эта строка валидна, если:
- Открытые скобки должны быть закрыты однотипными строками
- Открытые скобки должны быть закрыты в правильном порядке
- Каждой закрывающей скобке соответствует открытая скобка того же типа
Пример 1:
Input: s = "()"
Output: true
Пример 2:
Input: s = "()[]{}"
Output: true
Пример 3:
Input: s = "(]"
Output: false
def isValid(s):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
5. Valid Parentheses (легкая)
leetcode.com/problems/valid-parentheses
Получаем строку s, содержащую только символы '(', ')', '{', '}', '[' и ']', определите, валидна ли эта строка.
Эта строка валидна, если:
- Открытые скобки должны быть закрыты однотипными строками
- Открытые скобки должны быть закрыты в правильном порядке
- Каждой закрывающей скобке соответствует открытая скобка того же типа
Пример 1:
Input: s = "()"
Output: true
Пример 2:
Input: s = "()[]{}"
Output: true
Пример 3:
Input: s = "(]"
Output: false
def isValid(s):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
🥰3
Давайте разберемся в тонкостях выделения памяти под список и как она себя ведет при увеличении, размера, какая сложность этих операций, и почему иногда лучше сразу создать список на столько элементов, сколько вам пригодится в будущем.
https://telegra.ph/Kogda-slozhnost-append-mozhet-byt-On-06-23
https://telegra.ph/Kogda-slozhnost-append-mozhet-byt-On-06-23
Telegraph
Когда сложность append() может быть О(n)
Почему операция append() может иметь сложность O(n), мы же просто добавляем 1 элемент в конец списка? Дело в том, что изначально под список аллоцируется/выделяется определенное кол-во памяти, чаще на 4 элемента, и когда мы добавляем 5-ый, то происходит перевыделение…
🔥5
Всем, привет!
Мы уже решали задачи на списки, на хэш таблицы и на стек.
Завтра будет задача на литкод паттерн - two pointers. Когда мы итерируемся по списку, то как правило мы перебираем элементы подряд, и текущий элемент у нас 1. Суть паттерна two pointers заключается в том, что мы вводим 2 указателя и по сути у нас 2 текущих элемента. Самый простой пример, это определение, что слово - полиндром (эта задача будет на следующей неделе и её усложненная версия тоже). Можно развернуть строку/список и сравнить с первоначальной. Но если строка слишком большая, то не очень хорошо выделять ещё столько же памяти. Тогда можно ввести 2 указателя, один будет идти с конца строки, а второй с начала и идти с двух концов до середины строки, сравнивая элементы.
Также интересно, какие темы больше интересуют на канале.
Мы уже решали задачи на списки, на хэш таблицы и на стек.
Завтра будет задача на литкод паттерн - two pointers. Когда мы итерируемся по списку, то как правило мы перебираем элементы подряд, и текущий элемент у нас 1. Суть паттерна two pointers заключается в том, что мы вводим 2 указателя и по сути у нас 2 текущих элемента. Самый простой пример, это определение, что слово - полиндром (эта задача будет на следующей неделе и её усложненная версия тоже). Можно развернуть строку/список и сравнить с первоначальной. Но если строка слишком большая, то не очень хорошо выделять ещё столько же памяти. Тогда можно ввести 2 указателя, один будет идти с конца строки, а второй с начала и идти с двух концов до середины строки, сравнивая элементы.
Также интересно, какие темы больше интересуют на канале.
❤2
Какие темы интересны? (Можно выбрать несколько)
Anonymous Poll
68%
Разбор вопросов с собеседований
32%
Базовые темы в python ps_base
36%
Leetcode задачи
36%
Алгоритмы (сложность, хеш-таблицы, …)
0%
Свой вариант в комментарии
Все выдохнули? В понедельник можно будет решить ещё одну задачку, раз выходной 🌚
😁6❤2
Воскресная задачка. Кстати у меня она была давным давно в Яндекс)
6. Move Zeroes (легкая)
leetcode.com/problems/move-zeroes
Получаем целочисленный массив nums, необходимо перенести все 0 в его конец, сохраняя порядок ненулевых элементов.
Пример 1:
Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
Пример 2:
Input: nums = [0]
Output: [0]
def moveZeroes(nums):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
6. Move Zeroes (легкая)
leetcode.com/problems/move-zeroes
Получаем целочисленный массив nums, необходимо перенести все 0 в его конец, сохраняя порядок ненулевых элементов.
Пример 1:
Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
Пример 2:
Input: nums = [0]
Output: [0]
def moveZeroes(nums):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
👍5
Тот самый день, когда хотел пойти на работу как жест доброй воли, но на работе сказали, что день рабочий
7. Valid Palindrome (легкая)
leetcode.com/problems/valid-palindrome
Фраза является палиндромом, если после преобразования всех прописных букв в строчные и удаления всех не буквенно-цифровых символов она читается одинаково вперед и назад. На вход подается строка s верните True, если полиндром и False, если нет.
Пример 1:
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" полиндром.
Пример 2:
Input: s = "race a car"
Output: false
Explanation: "raceacar" не полиндром.
Пример 3:
Input: s = " "
Output: true
def isPalindrome(s):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
7. Valid Palindrome (легкая)
leetcode.com/problems/valid-palindrome
Фраза является палиндромом, если после преобразования всех прописных букв в строчные и удаления всех не буквенно-цифровых символов она читается одинаково вперед и назад. На вход подается строка s верните True, если полиндром и False, если нет.
Пример 1:
Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" полиндром.
Пример 2:
Input: s = "race a car"
Output: false
Explanation: "raceacar" не полиндром.
Пример 3:
Input: s = " "
Output: true
def isPalindrome(s):
«Ваше решение»
Ваша задача решить эту задачу на литкоде и успешно засабмитить
*разбор будет в комментариях в нескольких сообщениях, чтобы вы могли подумать над решением
Список всех задач
#ps_leetcode
❤6
This media is not supported in your browser
VIEW IN TELEGRAM
Всем привет, у канала есть чат, там можно задавать вопросы, не относящиеся к постам и что-то обсуждать. Ссылки на него нет, но если кто-то не знает, как его найти, прикрепляю видео)
👍6