algorithms_and_data_structures
1.0.0
Текущий статус | Статистика |
---|---|
Всего проблем с C++ | 188 |
Всего проблем с Python | 15 |
Текущая ежедневная серия | 11 |
Последняя серия | 20.06.2019 - 21.06.2019 |
Текущая серия | 23.06.2019 - 03.07.2019 |
Примечание. Часть кода здесь старая и была написана, когда я изучал C++. Возможно, код небезопасен или делает неправильные предположения. Пожалуйста, используйте с осторожностью. Запросы на вытягивание всегда приветствуются.
Проблема | Решение |
---|---|
Найдите n-й узел связанного списка от последнего. | nthToLastNode.cpp, nth_to_last_node.py |
Добавьте числа, в которых каждая цифра числа представлена узлом связанного списка. Выдайте вывод в виде связанного списка. | add_two_numbers_lists.cpp, add_two_numbers_list.py |
Поменяйте местами узлы связанного списка без замены данных. | swapNodesWithoutSwappingData.cpp, swap_nodes_without_swapping_data.py |
Перевернуть связанный список, итеративно и рекурсивно | verseLinkedListIterAndRecurse.cpp,verse_linkedlist.py |
Учитывая связанный список, поменяйте местами альтернативные узлы и добавьте их в конец. | обратныйAlternateNodes.cpp |
Только при наличии указателя узла удалите узел из связанного списка. | удалитьNode.cpp |
Удалить весь связанный список. | удалитьLinkedlist.cpp |
Распечатайте средний узел связанного списка без двойной итерации. | printMiddleNode.cpp |
Определите, является ли связный список паллиндромом. | listPallindrome.cpp |
Вставьте данные в отсортированный связанный список. | вставитьInASortedLinkedList.cpp |
Определите точку пересечения (слияния) двух заданных связанных списков. | findIntersectionPointOfLists.cpp, пересечения_списков.py |
Клонируйте связанный список, в котором есть следующий и случайный указатель, космическая сложность — O(1). | cloneListWithRandomPtr.cpp, clone_list_with_random_ptr.py |
Учитывая отсортированный связанный список с дубликатами, удалите дубликаты за одну итерацию. | удалитьDuplicationsFromSortedList.cpp |
Используя алгоритм поиска цикла Флойда, определите, содержит ли связанный список цикл; если он содержит цикл, удалите цикл. | floyedCycleDetection.cpp |
Сортировка связанного списка с помощью сортировки слиянием | merge_sort.cpp |
Дан односвязный список L 0 -> L 1 -> … -> L n-1 -> L n . Переставьте узлы в списке (на свои места) так, чтобы новый сформированный список был: L 0 -> L n -> L 1 -> L n-1 -> L 2 -> L n-2 .... | rerange_list.cpp |
Include содержит реализацию структур данных и некоторых алгоритмов с одним заголовком.
Структура данных/алгоритм | Выполнение |
---|---|
Общие макросы и алгоритмы, такие как обмен, генерация случайных чисел. | общий.h |
Общая реализация стека | stack.h |
Общая реализация очереди | очередь.ч |
Общая реализация списка | list.h |
Реализация двоичного дерева поиска | двоичныйSearchTree.h |
Реализация быстрой сортировки | быстрая сортировка.h |
Реализация сортировки слиянием | mergeSort.h |
Реализация сортировки выбором | выборSort.h |
Реализация пузырьковой сортировки | bubbleSort.h |
Реализация двойного связанного списка ядра Linux | double_linked_list.h |
Общая реализация графа (список смежности) | график.h |
Реализация пирамидальной сортировки | heap_sort.h |
Моя собственная реализация библиотеки строк | pstring.h pstring.cpp |
Проблема | Решение |
---|---|
Определите, является ли число степенью 2. | power_of_2.cpp |
Добавьте два двоичных числа, представленных в виде строки. | addBin.cpp |
Определите следующую степень двойки для данного числа. | next_power_of_2.cpp |
Используя битовые манипуляции, определите, кратно ли число 3. | Multiple_of_3.cpp |
Определите порядок байтов машины, выведите число в обратном порядке. | обратный байт.cpp |
Найдите четность данного числа. | find_parity.cpp |
Реализуйте быстрое умножение числа до 7 с помощью битовых манипуляций. | умножить_by_7.cpp |
Обратные биты беззнакового целого числа (два метода: побитовое изменение и «разделяй и властвуй»). | обратныйBitsOfAnInteger.cpp |
Небольшая функция для определения положения крайнего правого бита в заданном целом числе. | right_most_set_bit.cpp |
В векторе чисел только одно число встречается нечетное количество раз, найдите это число. | find_odd_one_out.cpp |
Учитывая два целых числа, определите, будет ли их сумма переполнением целых чисел. | целоеOverflow.cpp |
Сколько битов потребуется для преобразования числа A в B? | countNumberOfBitFlips.cpp |
Учитывая число x и две позиции (справа) в двоичном представлении x, напишите функцию, которая меняет местами n правых битов в заданных двух позициях и возвращает результат. Также предусмотрено, что два набора битов не перекрываются. | swapSetOfBits.cpp |
Сложите два числа без использования каких-либо арифметических операторов. | дополнение_без_операторов.cpp |
Луиза и Ричард играют в игру. У них есть счетчик, установленный на Н. Луиза получает первый ход, а затем ходы чередуются. В игре они выполняют следующие операции:
| counter_game.cpp |
Определите, имеют ли два целых числа противоположные знаки. | check_opposite_signs.cpp |
Поменяйте местами два бита в позициях p и q заданного целого числа. | swapBits.cpp |
Проверьте, является ли число степенью 4. | check_if_power_of_4.cpp |
Проблема | Решение |
---|---|
Задача 1-1: Редакция 6: Напишите алгоритм, определяющий, содержит ли строка уникальные символы или нет. Можем ли мы сделать это без использования дополнительных структур данных? | 1-1-hasUniqueChars.cpp, 1-1-hasUniqueChars.py |
Проблема 1-2: Версия 5: переверните строку, когда вы передаете строку C с нулевым завершением. | 1-2-edi5-reverseString.cpp |
Задача 1-2: Редакция 6: Учитывая две строки, определите, является ли одна из них перестановкой других. | 1-2-perm-strings.cpp, 1-2-perm-strings.py |
Задача 1-3: Редакция 5: Напишите алгоритм удаления повторяющихся символов из строки. | 1-3-edi5-removeDuulates.cpp |
Проблема 1-3: Версия 6: URLify: Замените все пробелы в строке на «%20». Предпочтительно на месте | 1-3-URLify.cpp |
Задача 1-4: Редакция 6: Для заданной строки напишите функцию, проверяющую, является ли она перестановкой паллиндрома. | 1-4-паллиндром-permutations.cpp |
Проблема 1-5: Редакция 6: Существует три возможных редактирования строки: вставить символ, удалить символ, заменить символ. Учитывая две строки, определите, находятся ли они на расстоянии одного или 0 изменений. | 1-5-one-edit-away.cpp |
Задача 1–6. Реализуйте метод базового сжатия строк. Пример строки aabcccccaaa должен быть сжат до a2b1c5a3 , однако, если сжатая строка больше исходной, верните исходную строку. | 1-6-строка-сжатие.cpp |
Задача 1–7. Поверните матрицу по часовой стрелке (и против часовой стрелки) на 90 градусов. | 1-7-матрица-ротация.cpp |
Задача 1-8. Напишите алгоритм, согласно которому, если элемент матрицы MxN равен 0, вся его строка и столбец устанавливаются в 0. | 1-8-нулевая матрица.cpp |
Задача 1–9. Имея две строки s1 и s2, определите, что s2 является вращением s1, используя только один вызов функции, которая проверяет, является ли одна строка вращением другой. | 1-9-строка-rotation.cpp |
Проблема 2-1. Удаление дубликатов из несортированного связанного списка. Что делать, если временный буфер не разрешен. | 2-1-remove-dups.cpp |
Задача 2-2: Определить k- й узел из последнего односвязного списка. (Итеративные и рекурсивные подходы) | 2-2-kthToLast.cpp |
Проблема 2-3. Реализуйте алгоритм удаления узла в середине односвязного списка. | 2-3-удалить-средний-node.cpp |
Проблема 2-4. Разделите связанный список вокруг значения x, все узлы, меньшие, чем x, предшествуют всем узлам, большим, чем равный x. | 2-4-раздел.cpp |
Задача 2-5. У вас есть два числа, представленные связанным списком, каждый узел которого содержит одну цифру. Цифры хранятся в обратном порядке, так что цифры 1 находятся в начале списка. Напишите функцию, которая складывает два числа и возвращает сумму в виде связанного списка. Пример:
| 2-5-add-lists.cpp |
Задача 2-6. Определите, является ли связанный список палиндромом (2 итеративных и один рекурсивный подход). | 2-6-палиндром.cpp |
Задача 2-7. Определите, пересекаются ли два односвязных списка. Если да, верните пересекающийся узел. Пересечение определяется на основе ссылки, а не значений. | 2-7-intersection.cpp |
Задача 2-8. Определите, есть ли в связанном списке цикл. Найдите начальный узел цикла и удалите цикл. | 2-8-loop-detection.cpp |
Проблема | Решение |
---|---|
N- й член Фибоначчи с использованием различных методов запоминания | фибоначчи.cpp |
Задача о самой длинной общей подпоследовательности | lcs.cpp, longest_common_subsequence.py |
Вики-задача о непрерывной подпоследовательности максимального значения | max_subsequence.cpp |
Каталонское число — подсчитайте количество возможных деревьев двоичного поиска с n ключами. | каталанский_номер.cpp |
Рассчитайте количество уникальных путей от исходного источника (0, 0) до места назначения (m-1, n-1) в сетке amxn. Вы можете двигаться только вниз или вправо. | unique_paths.cpp |
0-1 Задача о рюкзаке: Представьте, что вы вор и хотите украсть вещи, а комната полна вещей. У вас есть рюкзак, который может вместить максимальную грузоподъемность W, и вы хотите наполнить его так, чтобы его ценность была максимальной. Будучи умным вором, вы знаете вес и ценность каждого предмета в комнате. Как бы вы наполнили свой рюкзак так, чтобы получить максимально возможную величину, чтобы вы могли наполнить его только до вместимости W. | 0_1_knapsack_problem.cpp |
Проблема | Решение |
---|---|
Итеративный обход порядка уровня дерева с использованием очереди | levelOrderTraversalIterative.cpp, level_order_tree_traversal_iterative.py |
Рекурсивный обход уровня дерева | levelOrderTraversalRecursive.cpp, level_order_tree_traversal_recursive.py |
Зигзагообразный обход дерева | zigZagTraversal.cpp, zig_zag_traversal.py |
Предшественник и преемник данного узла в двоичном дереве поиска | предшественникПреемник.cpp |
Учитывая значения двух узлов в двоичном дереве поиска, найдите наименьшего общего предка (LCA). Предположим, что оба значения существуют в дереве. | самый низкий-common-ancestor.cpp, самый низкий_common_ancestor.py |
Учитывая двоичное дерево (в отличие от двоичного дерева поиска), найдите наименьшего общего предка (LCA). | самый низкий общий-предок-двоичное-дерево.cpp |
Учитывая двоичное дерево, выведите все его пути от корня к листу, по одному в каждой строке. | printAllRootToLeafPath.cpp |
Определите, является ли дерево деревом сумм. SumTree — это двоичное дерево, в котором значение узла равно сумме узлов, присутствующих в его левом и правом поддереве. Пустое дерево — это SumTree, а сумма пустого дерева может считаться равной 0. Листовой узел также считается SumTree. | sumTree.cpp |
Преобразуйте дерево в sumTree так, чтобы каждый узел представлял собой сумму левого и правого поддерева исходного дерева. | Convert_to_sum_tree.cpp, Convert_to_sum_tree.py |
Преобразуйте отсортированный массив в сбалансированное двоичное дерево поиска. | sortedArrayToBST.cpp |
Учитывая двоичное дерево, сгенерируйте сумму каждого вертикального столбца. | вертикальнаясумма.cpp |
Учитывая двоичное дерево и ключ, узел с ключом существует в дереве. Найдите всех предков узла с ключом. Предком здесь являются узлы, которые находятся на прямом пути от узла к корню. | node_ancestors_in_root_path.cpp |
Учитывая двоичное дерево и ключ, верните уровень узла с ключом. Корень находится на уровне 1, и если узел с ключом не существует в дереве, верните 0. | level_of_node.cpp |
Учитывая двоичное дерево, найдите все пути от корня до узлов, сумма которых равна k. | k_sum_paths.cpp |
Учитывая двоичное дерево, выведите его узлы уровень за уровнем в обратном порядке. т.е. все узлы, присутствующие на последнем уровне, должны быть напечатаны первыми, за ними следуют узлы предпоследнего уровня и так далее. Все узлы любого уровня должны печататься слева направо. | обратныйLevelOrderTraversal.cpp |
Инвертируйте двоичное дерево рекурсивно и итеративно. | invert_a_tree.cpp |
Учитывая двоичное дерево поиска, найдите в нем ячейку и пол заданного ключа. Если данный ключ находится в BST, то и пол, и ячейка равны этому ключу, в противном случае ячейка равна следующему большему ключу (если есть) в BST, а пол равен предыдущему большему ключу (если есть) в BST. | Floor_ceil_bst.cpp |
Найдите k-й наименьший элемент в бинарном дереве поиска. | kth_smallest.cpp |
Проверьте, является ли данное двоичное дерево двоичным деревом поиска. | validate_bst.cpp |
Учитывая двоичное дерево поиска и целевой номер, верните true, если в BST существуют два элемента, их сумма равна заданному целевому значению. | find_target_k.cpp |
Учитывая непустое двоичное дерево поиска и целевое значение, найдите в BST значение, ближайшее к целевому. Также следует отметить, что целевое значение является плавающей запятой. Будет только одно уникальное значение, наиболее близкое к целевому. | Ближайший_bst_value.cpp, Ближайший_bst_value.py |
Учитывая двоичное дерево, проходящее по предварительному порядку, создайте выходную строку, содержащую значения узлов и круглые скобки. Нулевой узел должен быть представлен парой пустых круглых скобок «()». И вам нужно опустить все пары пустых круглых скобок, которые не влияют на взаимно однозначное соотношение между строкой и исходным двоичным деревом. Примеры в файле кода | string_from_tree.cpp |
Проблема | Решение |
---|---|
Реализация алгоритма Робина-Карпа для поиска строк | robinKarpStringMatching.cpp |
Найти следующую перестановку данной строки, т.е. переставить данную строку таким образом, чтобы она была следующей лексикографически большей строкой, чем заданная строка | next_permutation.cpp |
Реализация алгоритма Z для сопоставления с образцом | z.cpp |
Тестовые примеры для самостоятельно созданной библиотеки строк | pstring_test.cpp |
Получить длину последнего слова в строке. | length_of_last_word.cpp |
Найдите разницу между двумя строками. Строка t генерируется случайным перетасовкой строки s с последующим добавлением еще одной буквы в случайную позицию. Определите признак, который отличается по t | find_difference.cpp |
Проблема | Решение |
---|---|
Распечатайте содержимое матрицы по спирали. | матрица_spiral_print.cpp |
Дана матрица M x N, поверните ее на R оборотов против часовой стрелки и покажите полученную матрицу. | Rotate_matrix.cpp |
Поворот массива на r элементов (влево или вправо) | array_rotation.cpp |
Учитывая массив повторяющихся/неповторяющихся чисел, определите первое неповторяющееся целое число в этом массиве. | first_non_repeating_int.cpp |
В Квантовой стране n городов, пронумерованных от 1 до n. Здесь c i обозначает i- й город. В Квантовой стране n−1 дорог. Здесь c i и c i+1 имеют двустороннюю дорогу между собой для каждого i < n. Ходят слухи, что Флатландия собирается напасть на Квантовую страну, и королева хочет сохранить свою землю в безопасности. Дорога между c i и c i+1 безопасна, если в c i или c i+1 есть охранник. Королева уже разместила несколько стражников в некоторых городах, но она не уверена, достаточно ли их для обеспечения безопасности дорог. Она хочет знать минимальное количество новых охранников, которые ей нужно нанять. Подробности ввода/вывода см. в комментариях к решению. | save_quantamland.cpp |
Вам дано целое число N. Найдите в этом числе цифры, которые точно делят N (деление, при котором в остатке остается 0), и выведите их количество. Для N=24 имеется 2 цифры (2 и 4). Обе эти цифры в точности делят 24. Итак, наш ответ — 2. Более подробную информацию см. в комментарии к заголовку файла решения. | findDigits.cpp |
Зашифровать, а затем расшифровать текст с помощью шифра Цезаря. | caeser_cipher.cpp |
Зашифровать, а затем расшифровать текст с помощью шифра Виженера. | vigenere_cipher.cpp |
Эффективно генерируйте двоичные числа от 1 до N. | n_binary.cpp |
Реализуйте функцию мощности | power_function.cpp |
Проблема | Решение |
---|---|
Выведите все перестановки строки. Пример: перестановки ABC: ABC, ACB, BCA, BAC, CAB, CBA. | string_permutations.cpp |
Алгоритм Евклида для нахождения наибольшего общего делителя двух чисел. (Итеративный и рекурсивный) | gcd.cpp |
Реализуйте pow(x,y), используя подход «разделяй и властвуй». Попробуйте реализовать это в O(logn) | pow.cpp |
Вычислить факториал большого числа, скажем, 100 (в нем будет 158 цифр). | факториал_of_large_num.cpp |
Сгенерируйте все возможные слова из числа, введенного на традиционной мобильной клавиатуре. | phone_digits.cpp |
Учитывая строковое представление числа, удалите из строки n символов так, чтобы представление числа было минимально возможным. | наименьший_возможный_номер.cpp |
Определите, является ли число счастливым числом. Число является счастливым числом, если последовательность операций, в которых число заменяется суммой квадратов его цифр, в конечном итоге приводит к 1. Число не является счастливым числом, если при выполнении вышеуказанных операций мы находимся в бесконечном цикле. | счастливый_номер.cpp |
Проблема | Решение |
---|---|
У нас есть серия из n ежедневных котировок цен на акции. Нам нужно рассчитать диапазон цен акций за все n дней. Промежуток для i-го дня определяется как максимальное количество последовательных дней, в течение которых цена акции была меньше или равна i-му дню. Для котировок акций {100, 60, 70, 65, 80, 85} интервал будет равен {1, 1, 2, 1, 4, 5}. Разброс для дня 1 всегда равен 1, теперь для дня 2 цена акции составляет 60, и не было дня до этого, когда цена акции была меньше 60. Таким образом, разброс остается равным 1. Для дня 3 цена акции составляет 70, поэтому ее диапазон равно 2, так как в предыдущий день было 60 и так далее. | stock_span_problem.cpp |
Учитывая инфиксное выражение, преобразуйте его в постфиксное выражение. Пример (A+B)*C --> AB+C* | infix_to_postfix.cpp |
Учитывая строку, содержащую только символы '(', ')', '{', '}', '[' и ']', определите, является ли входная строка допустимой. Скобки должны закрываться в правильном порядке "( )" и "()[]{}" допустимы, а "(]" и "([)]" — нет. | valid_parenthesis.cpp |
Проблема | Решение |
---|---|
Учитывая отсортированный вектор, верните первый индекс вхождения значения в вектор, если число не существует, верните -1 | first_occurrence_binary_search.cpp |
Найдите первый повторяющийся элемент в массиве целых чисел. Дан массив целых чисел, найдите в нем первый повторяющийся элемент. Нам нужно найти элемент, который встречается более одного раза и у которого индекс первого появления наименьший. | firstRepeatingElement.cpp |
Учитывая список неотсортированных целых чисел, A={a 1 ,a 2 ,…,a N }. Найдите пару элементов, между которыми имеется наименьшая абсолютная разница? Если пар несколько, найдите их все. | ближайший_numbers.cpp |
Учитывая отсортированный массив, определите индекс фиксированной точки в этом массиве. Если массив не имеет фиксированной точки, верните -1. Массив имеет фиксированную точку, когда индекс элемента совпадает с индексом, т.е. i == arr[i], ожидаемая временная сложность O(logn) | фиксированная точка.cpp |
Найдите максимальный элемент массива, который сначала увеличивается, а затем уменьшается. Входные данные: arr[] = {8, 10, 20, 80, 100, 200, 400, 500, 3, 2, 1}, выходные данные: 500. Массив также может быть строго возрастающим или убывающим. Сложность ExpectedTime равна O(logn). | findMaximum.cpp |
Учитывая массив положительных и/или отрицательных целых чисел, найдите в массиве пару, сумма которых ближе всего к 0. | findClosestPairToZero.cpp |
Нумерос, Художник, имел два списка А и Б, так что Б был перестановкой А. Нумерос очень гордился этими списками. К сожалению, при транспортировке с одной выставки на другую, некоторые цифры остались за бортом А. Сможете ли вы найти недостающие цифры? Примечания:
| MissingNumbers.cpp |
Найдите ближайшую пару из двух отсортированных массивов. Учитывая два отсортированных массива и число x, найдите пару, сумма которой ближе всего к x, и пара содержит элемент из каждого массива. Нам даны два массива ar1[0…m-1] и ar2[0..n-1] и число x, нам нужно найти пару ar1[i] + ar2[j] такую, что абсолютное значение (ar1 [i] + ar2[j] – x) минимально. | ближайшийPairSorted.cpp |
Дан массив A из n элементов. Найдите три индекса i, j и k такие, что A[i]^2 + A[j]^2 = A[K]^2. Временная сложность O(n2) и пространственная сложность O(1) | SquareSum.cpp |
Учитывая несортированный массив arr[0..n-1] размера n, найдите подмассив arr[s..e] минимальной длины такой, что сортировка этого подмассива приводит к сортировке всего массива. | minLengthUnsortedArray.cpp |
Найдите пропущенное число в арифметической прогрессии. | MissingNumber2.cpp |
Найдите общие элементы в трех отсортированных векторах. | commonIn3Arrays.cpp |
Найдите все пары с заданной суммой в несортированном массиве/векторе. | find_pairs_with_sum.cpp |
Дан массив, найдите в нем пиковый элемент. Пиковый элемент — это элемент, который больше своих соседей. | peak_element.cpp |
Дан отсортированный массив различных неотрицательных целых чисел. Найдите в нем наименьший недостающий элемент. | наименьший_отсутствующий.cpp |
Переместить все нули в векторе в конец | move_zeros.cpp |
Проблема | Решение |
---|---|
Обход графа в глубину | dfsDemo.cpp |
Обход графа в ширину | bfsDemo.cpp |
вычислите кратчайшее расстояние от начальной позиции (узел S) до всех остальных узлов графа, используя алгоритм Дейкстры. | dijkstra-shortest-reach.cpp |
Рассчитайте общий вес минимального остовного дерева данного графа (сумма весов ребер, образующих MST), используя алгоритм Прима. | primsMST.cpp |
Распечатайте минимальное связующее дерево (MST) данного графа, используя алгоритм Крускала. | КрускалMST.cpp |
Создайте программу для генерации кодировки Хаффмана для каждого символа в виде таблицы. | huffman_encoding.cpp |
Найдите заданное слово на 2D-доске, содержащей буквы. Слово можно составить путем последовательного обхода соседних горизонтальных или вертикальных ячеек. В последовательности, образующей слово, буква в одной и той же позиции не может использоваться более одного раза. (Примеры можно найти в начале файла.) | Grid_word_search.cpp |
Учитывая 2D-экран, расположение пикселя и новое значение цвета для заливки, замените цвет пикселя и всех соседних (вверху, внизу, слева, справа) пикселей того же цвета новым цветом. Это то же самое, что заливка (помните символ ведра) области в MS-PAINT. | Flood_fill.cpp |
Проблема | Решение |
---|---|
Даны два целочисленных массива A и B, каждый из которых содержит N целых чисел. Вы можете свободно менять порядок элементов в массивах. Возможна ли перестановка A', B' A и B такая, что A' i +B' i ≥ K для всех i, где A' i обозначает i -й элемент в массиве A', а B' i обозначает i -й элемент массива B'. | два_массива.cpp |
Джон принимает заказы. i -й заказ размещен i -м покупателем в момент времени , и его обработка занимает di времени. В каком порядке клиенты будут получать свои заказы? (подробнее см. в комментариях к решениям) | orders_order.cpp |
Проблема | Решение |
---|---|
Вам предоставляется строка цифр (например, «1234», «567» и т. д.), укажите все возможные комбинации букв, которые мы могли бы сгенерировать из этой строки цифр, на основе сопоставления, которое мы видим на панели набора номера телефона/мобильного телефона. Если бы вы набирали SMS на телефонах старого образца, вы бы это знали. Например, «1» отображается в «abc», 2 отображается в «def». Вы можете обратиться к изображению..
| disk_combinations.cpp |
Реализуйте обработку шаблонов подстановочных знаков с поддержкой '?' & ' '.
| wild_card_matching.cpp |
Имея двухмерную доску и список слов из словаря, найдите все возможные слова на доске из списка. (Проверьте пример в решении) | word_search.cpp |
Проблема | Решение |
---|---|
Учитывая отсортированный целочисленный массив без дубликатов, верните сводку его диапазонов. Например, если задано [0,1,2,4,5,7], верните ["0->2","4->5","7"]. | summary_ranges.cpp |
Дана двумерная матрица со следующими свойствами
| search2DII.cpp |
Учитывая несортированный целочисленный массив, найдите первое недостающее положительное целое число. Пример: [1,2,0] должно возвращать 3, а [3,4,-1,1] должно возвращать 2. Ожидаемая временная сложность O(n) и решение должно использовать постоянное пространство | firstMissingPositiveNum.cpp |
Учитывая несортированный массив целых чисел, найдите длину самой длинной последовательности последовательных элементов. Например: Дано [100, 4, 200, 1, 3, 2]. Самая длинная последовательная последовательность элементов — [1, 2, 3, 4]. Возвращает его длину: 4. Алгоритм должен работать со сложностью O(n). | самый длинныйConsecutiveSeq.cpp |
Учитывая два отсортированных целочисленных массива nums1 и nums2, объедините nums2 с nums1 в один отсортированный массив. Вы можете предположить, что nums1 имеет достаточно места (размер больше или равен m + n) для хранения дополнительных элементов из nums2. Количество элементов, инициализированных в nums1 и nums2, равно m и n соответственно. | mergeArrays.cpp |
Учитывая массив неотрицательных целых чисел, вы изначально находитесь в первом индексе массива. Каждый элемент массива представляет максимальную длину прыжка в этой позиции. Определите, сможете ли вы достичь последнего индекса. Например:
| jumpGame.cpp |
Учитывая положительное целое число, верните соответствующий заголовок столбца, как показано на листе Excel. Например, 1 -> A, 2 -> B,...26 -> Z, 27 -> AA, 28 -> AB, ...705 -> AAC. | ExcelColSheetTitle.cpp |
Учитывая числа массива, напишите функцию, которая переместит все 0 в конец, сохраняя при этом относительный порядок ненулевых элементов. Например, если nums = [0, 1, 0, 3, 12], после вызова функции nums должно быть [1, 3, 12, 0, 0]. | moveZeroes.cpp |
Учитывая массив целых чисел, найдите, содержит ли массив дубликаты. Функция должна возвращать true, если какое-либо значение встречается в массиве хотя бы дважды, и должна возвращать false, если каждый элемент различен. | содержитDuulate.cpp |
Учитывая список, поверните список вправо на k мест, где k неотрицательно. Например:
| RotateList.cpp |
Даны два слова слово1 и слово2. Найдите минимальное количество шагов, необходимое для преобразования слова1 в слово2. (каждая операция считается за 1 шаг.). Над словом разрешены следующие 3 операции:
| editDistance.cpp |
Учитывая двоичное дерево, заполните каждый следующий указатель, чтобы он указывал на следующий правый узел. Если следующего правого узла нет, следующий указатель должен быть установлен в NULL. Первоначально все указатели next установлены в NULL. Вы можете использовать только постоянное дополнительное пространство. Вы можете предположить, что это идеальное двоичное дерево (т. е. все листья находятся на одном уровне, и у каждого родителя есть два потомка). | ConnectNextPointers.cpp |
Учитывая n пар круглых скобок, напишите функцию, которая генерирует все комбинации правильных круглых скобок. Например, при n = 3 набором решений будет "((()))", "(()())", "(())()", "()(())", "( )()()" | генерировать_parenthesis.cpp |
Учитывая массив, содержащий n различных чисел, взятых из 0, 1, 2, ..., n, найдите то, которое отсутствует в массиве. Например, заданные числа = [0, 1, 3] возвращают 2. | отсутствующий_номер.cpp |
Предположим, что отсортированный массив поворачивается в некоторой заранее неизвестной вам точке поворота. (т.е. 0 1 2 4 5 6 7 может стать 4 5 6 7 0 1 2). Найдите минимальный элемент. Вы можете предположить, что в массиве нет дубликатов. | find_min_rotated.cpp |
Дан массив S из n целых чисел. Найдите в S три целых числа, сумма которых наиболее близка к заданному числу target. Возвращает сумму трех целых чисел. Вы можете предположить, что каждый вход будет иметь ровно одно решение. | триSumClosest.cpp |
Даны n неотрицательных целых чисел a 1 , a 2 , ..., an n , каждое из которых представляет точку с координатой (i, a i ). n вертикальных линий нарисованы так, что две конечные точки линии i находятся в точках (i, ai ) и (i, 0). Найдите две линии, которые вместе с осью X образуют контейнер, в котором содержится больше всего воды. Примечание. Контейнер нельзя наклонять. | maxArea.cpp |
Учитывая двоичное дерево, содержащее только цифры от 0 до 9, каждый путь от корня к листу может представлять собой число. Примером может служить путь от корня к листу 1->2->3, который представляет число 123. Найдите общую сумму всех чисел от корня к листу. Пример в комментариях к решению | sumRootToLeafNumbers.cpp |
Предположим, у вас есть массив, в котором i-й элемент представляет собой цену данной акции в день i. Если вам разрешено совершить не более одной транзакции (т. е. купить одну и продать одну акцию), разработайте алгоритм для поиска максимальной прибыли. | maxProfitStock.cpp |
Учитывая сетку amxn, заполненную неотрицательными числами, найдите путь сверху слева направо вниз, который минимизирует сумму всех чисел на этом пути. Примечание. В любой момент времени вы можете двигаться только вниз или вправо. | minPath.cpp |
Подсчитайте количество простых чисел, меньших неотрицательного числа n. | countPrimes.cpp |
Найдите все возможные комбинации из k чисел, которые в сумме дают число n, учитывая, что можно использовать только числа от 1 до 9 и каждая комбинация должна представлять собой уникальный набор чисел. Убедитесь, что числа в наборе отсортированы по возрастанию. Пример: для k = 3, n = 9 результатом будет [[1,2,6], [1,3,5], [2,3,4]], аналогично для k = 3, n = 7, результат будет [[1,2,4]]. | комбинацияSum3.cpp |
Учитывая неотрицательное целое число, несколько раз складывайте все его цифры, пока в результате не останется только одна цифра. Например: Учитывая num = 38, процесс выглядит следующим образом: 3 + 8 = 11, 1 + 1 = 2. Поскольку 2 имеет только одну цифру, верните ее. Продолжение: можете ли вы сделать это без каких-либо циклов/рекурсий во время выполнения O (1)? | addDigits.cpp |
Дана матрица со значениями ячеек 0 или 1. Найдите длину кратчайшего пути от (a1, b1) до (a2, b2), такого, чтобы путь можно было построить только через ячейки, имеющие значение 1, и вы можете путешествовать только за 4. возможные направления, т.е. влево, вправо, вверх и вниз. | shortest_path_maze.cpp |
Расстояние Хэмминга между двумя целыми числами — это количество позиций, в которых соответствующие биты различны. По двум целым числам x и y вычислите расстояние Хэмминга. | hamming_distance.cpp |
Имея два двоичных дерева, представьте, что когда вы помещаете одно из них, чтобы покрыть другое, некоторые узлы двух деревьев перекрываются, а другие нет. Вам нужно объединить их в новое двоичное дерево. Правило слияния заключается в том, что если два узла перекрываются, суммируйте значения узлов как новое значение объединенного узла. В противном случае узел NOT null будет использоваться в качестве узла нового дерева. | merge_trees.cpp |
Напишите функцию, которая принимает на вход строку и меняет местами только гласные в строке. | verse_vowels.cpp |
Дана строка, отсортируйте ее в порядке убывания частоты символов. Например:
| sortCharByFrequency.cpp |
Продукт массива, кроме Self. Учитывая массив из n целых чисел, где n > 1, nums, верните вывод массива так, что выход [i] равен произведению всех элементов nums, кроме nums[i]. | Product_Exception_self.cpp |
Учитывая отсортированный массив, удалите дубликаты на месте и верните новую длину. Не имеет значения, что находится в массиве за пределами размера уникальных элементов. Ожидаемая пространственная сложность O(1) и временная сложность O(n). | удалить_дупликаты.cpp |
Подсчитайте количество островов в сетке. Учитывая сетку, представляющую 1 как сухопутный объект и 0 как водный объект, определите количество островов (подробнее в комментариях к задаче). | count_islands.cpp |
Найдите медиану из потока данных. Разработайте структуру данных, которая поддерживает addNum для добавления числа в поток и findMedian для возврата медианы текущих чисел, наблюдаемых на данный момент. Кроме того, если количество чисел четное, верните среднее значение двух средних элементов, в противном случае верните медиану. | медианный_поток.cpp |
Удалите минимальное количество недопустимых круглых скобок, чтобы входная строка стала допустимой. Вернуть все возможные результаты. Примечание. Входная строка может содержать буквы, отличные от скобок (и) | remove_invalid_parenthess.cpp |
Учитывая массив и значение, удалите все экземпляры этого значения на месте и верните новую длину. Не распределяйте дополнительное пространство для другого массива, вы должны сделать это, изменяя входной массив на месте с (1) дополнительной памятью. Порядок элементов может быть изменен. Неважно, что вы оставляете за пределами новой длины. | remove_element.cpp |
Найдите пересечение двух массивов/векторов, учитывая, что два вектора находят результат их взаимодействия. Результат должен содержать только уникальные символы и может быть в любом порядке | recsection_of_array.cpp |
Учитывая шаблон и строку Str, найдите, если STR следует за тем же шаблоном. Здесь следит за полным совпадением, так что существует биение между буквой в шаблоне и непустым словом в STR. пример: | |
Pattern = "abba", str = "Dog Cat Cat Dog" должен вернуть True. | |
Pattern = "abba", str = "Dog Cat Cat Fish" должен вернуть ложь. | |
Pattern = "aaaa", str = "собака кошачья собака" собака кота "должна вернуть ложь. | |
Pattern = "abba", str = "собака собака собаки" собака собака "должен вернуть ложь. | word_pattern.cpp |
Вам предоставляется вектор чисел, где представлено каждое число | |
Цена акций в день. Если вам разрешено только завершить | |
Одна транзакция в день (то есть купить один и продавать одну акцию), дизайн | |
Алгоритм, чтобы найти максимальную прибыль. | best_time_to_buy_sell.cpp |
Учитывая предложение, отмените порядок символов в каждом словом в предложении, сохраняя при этом пробелы и первоначальный порядок слов. | |
Пример: | |
Вклад: она любит шоколад | |
Выход: EHS SEVOL ETALOCOHC | reverse_words.cpp |