🍬 Распределяем конфеты между детьми: комбинаторная задача

Представьте, что у вас есть 5 конфет и 3 ребенка, но каждый может получить не больше 2 конфет. Сколько существует способов раздать конфеты? Это и есть суть задачи, которую мы будем решать.
Представьте, что у вас есть 5 конфет и 3 ребенка, но каждый может получить не больше 2 конфет. Сколько существует способов раздать конфеты? Это и есть суть задачи, которую мы будем решать.
Представьте, что вы разрабатываете систему кэширования для интернет-магазина. Нужно хранить популярные товары в быстром доступе, но память ограничена. Кэш LRU (Least Recently Used) - идеальное решение: он автоматически удаляет товары, которые давно не просматривали, освобождая место для новых. Давайте реализуем такой кэш
Представьте, что вы и ваш друг находитесь в разных точках лабиринта (узлах графа) и хотите встретиться в таком месте, чтобы максимальное из пройденных вами расстояний было как можно меньше. Именно такую проблему решает эта задача, только вместо лабиринта — направленный граф с особыми свойствами.
Представьте, что у вас есть два дерева (структуры данных), и вы можете соединить их одним ребром. Задача - для каждого узла первого дерева определить, какое максимальное количество узлов будет находиться на четном расстоянии от него после соединения с любым узлом второго дерева
Представьте, что у вас есть два дерева с узлами, и вы можете соединить их одним ребром. Нужно найти, как при таком соединении максимизировать количество узлов, достижимых из каждого узла первого дерева за не более чем k шагов
Представьте сеть городов (узлов), где каждый город окрашен в определенный цвет, а дороги (ребра) между ними имеют строгое направление. Ваша задача - найти самый длинный маршрут, на котором чаще всего встречается какой-либо один цвет, и при этом не попасть в "бесконечный круговорот" (цикл).
Представьте, что вы исследуете генеалогическое древо семьи. Сначала вы записываете себя, затем своих родителей, затем их родителей и так далее. Это и есть прямой обход (preorder) - сначала корень, затем левое поддерево, потом правое. В программировании такой подход часто используется для работы с древовидными структурами.
Представьте, что у вас есть набор двубуквенных карточек ("ab", "ba", "cc" и т.д.), и вам нужно составить из них самый длинный палиндром - слово, которое читается одинаково слева направо и справа налево. Как найти оптимальное решение? Давайте разберёмся!
Представьте, что у вас есть цепочка людей, держащихся за руки (это наш связный список). Вам нужно перестроить их так, чтобы первый человек взял за руку последнего, второй - предпоследнего и так далее. Именно это мы и будем делать с узлами связного списка в этой задаче.
Leetcode-задача "142. Linked List Cycle II" усложняет требования задачи "141 Linked List Cycle".
Если вы не рассматривали задачу "141 Linked List Cycle", то представьте, что вы бегаете по круговой дорожке стадиона с другом. Если вы бежите быстрее, то рано или поздно догоните его. Именно так работает алгоритм Флойда ("черепахи и зайца") для обнаружения циклов в связанных списках. Эта задача часто встречаетс
Представьте, что вы бежите по круговой дорожке стадиона с другом, который всегда бежит в два раза быстрее вас. Рано или поздно он вас обгонит - это и есть принцип обнаружения циклов в связном списке
Представьте, что у вас есть список слов, и вам нужно быстро найти все слова, где встречается определённая буква. Например, из списка ["яблоко", "банан", "апельсин"] найти все слова с буквой "а".
Представьте, что у вас есть строка без пробелов, например "catsanddog", и словарь слов ["cat","cats","and","sand","dog"]. Задача - найти все возможные способы разбить строку на слова из словаря, добавляя пробелы. Например: "cats and dog" и "cat sand dog".
Представьте, что у вас есть дерево с ценными узлами, и вы можете изменять значения соседних узлов, выполняя операцию XOR с заданным числом. Ваша задача - найти, какую максимальную сумму значений узлов можно получить, выполняя такие операции любое количество раз. Это как переключать состояния узлов, пытаясь добиться наибольшей общей ценности.
Представьте, что у вас есть список операций, которые могут уменьшать значения в массиве, и вам нужно оставить только минимально необходимое количество операций, чтобы обнулить массив. Как найти максимальное число ненужных операций, которые можно безопасно удалить?
Представьте, что у вас есть ряд чисел, например [4,3,2,1], и вам нужно обнулить их, выполняя операции: на каждом шаге можно выбрать любой поднабор чисел в заданном диапазоне и уменьшить их на 1. Задача состоит в том, чтобы определить, можно ли полностью обнулить массив, используя только заданные диапазоны операций.
Представьте, что у вас есть строка "ялюблюалгоритмы" и словарь ["я", "люблю", "алгоритмы"]. Можно ли разбить строку на слова из словаря?
В этой задаче даются три стороны треугольника. Нужно определить какой треугольник нам дан - равносторонний (equilateral), равнобедренный (isosceles) или разносторонний (scalene)
Вам нужно сделать точную копию цепочки людей, где каждый человек знает своего соседа (next) и случайного друга (random). При этом в новой цепочке все связи должны быть независимы от оригинала. Именно такую задачу мы решаем при копировании связанного списка со случайными указателями.
Пусть есть корзина с фруктами, где каждый вид фрукта повторяется ровно три раза, кроме одного уникального. Как быстро найти этот уникальный фрукт, не перебирая всю корзину по многу раз? Задача Single Number II предлагает элегантное решение с использованием битовых операций.
Используйте ссылку в приложениях для аудио-подкастов или RSS-каналов, таких как Apple Podcasts, Castbox, Overcast, Feedly и другие.
Копировать ссылку