🟢 Easy
977. Squares of a Sorted Array
📰 Дан массив целых чисел, отсортированный в неубывающем порядке. Вернуть массив квадратов каждого числа, отсортированный в неубывающем порядке.
Необходимо реализовать решение за O(n) по времени
Подсказка:используйте два указателя, сравнивая абсолютные значения элементов массива
128/200
#easy
#leetcode977
977. Squares of a Sorted Array
Необходимо реализовать решение за O(n) по времени
Подсказка:
128/200
#easy
#leetcode977
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
▫️Инициализируем новый массив для сохранения результата
▫️Проходим исходный массив с конца и с помощью двух указателей проверяем абсолютные значения элементов с левого и правого краев массива
▫️Выбираем наибольшее из них и записываем в новый массив квадрат данного элемента, а затем передвигаем соответствующий указатель
#solution977
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Medium
1004. Max Consecutive Ones III
📰 Дан двоичный массив и целое число k.
Верните максимальное количество последовательных единиц в массиве, если можно инвертировать не более k нулей
Подсказка:используйте подход sliding window
129/200
#medium
#leetcode1004
1004. Max Consecutive Ones III
Верните максимальное количество последовательных единиц в массиве, если можно инвертировать не более k нулей
Подсказка:
129/200
#medium
#leetcode1004
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
▫️Для решения используем скользящее окно, в котором количество нулей будет не больше K
▫️Для этого идем по массиву и ведем подсчет количества нулей. Если значение стало больше K — передвигаем левую часть окна, пока не уменьшим его, встретив ноль
▫️На каждом шаге сравниваем размер окна с текущим максимальным результатом
#solution1004
Please open Telegram to view this post
VIEW IN TELEGRAM
🟢 Easy
228. Summary Ranges
📰 Вам дан отсортированный массив уникальных чисел.
Верните наименьший отсортированный список диапазонов, которые покрывают все числа в массиве ровно. То есть, каждый элемент из массива покрывается ровно одним из диапазонов, и не существует целого числа, которое находится в одном из диапазонов, но его нет в массиве.
Каждый диапазон [a,b] в списке должен быть представлен как:
Подсказка:запоминайте стартовую точку диапазона, чтобы реализовывать правильное его представление
130/200
#easy
#leetcode228
228. Summary Ranges
Верните наименьший отсортированный список диапазонов, которые покрывают все числа в массиве ровно. То есть, каждый элемент из массива покрывается ровно одним из диапазонов, и не существует целого числа, которое находится в одном из диапазонов, но его нет в массиве.
Каждый диапазон [a,b] в списке должен быть представлен как:
1) "a", если a == b
2) "a->b", если a != b
Подсказка:
130/200
#easy
#leetcode228
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
▫️Инициализируем точку старта как нулевой элемент массива
▫️Проходимся по массиву и, если текущий элемент отличается от предыдущего больше, чем на 1 — делаем проверку:
- если предыдущий элемент равен стартовому, значит в диапазоне только одно число и необходимо использовать первое представление
- иначе используем второе представление, сохраняя точку старта и предыдущий элемент
- затем присваиваем точке старта значение текущего элемента
▫️В конце обрабатываем последний диапазон таким же способом
#solution228
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Medium
34. Find First and Last Position of Element in Sorted Array
📰 Дан массив целых чисел, отсортированный в неубывающем порядке. Найдите начальную и конечную позицию заданного target значения.
Если target не найдено в массиве, вернуть [-1, -1].
Необходимо реализовать решение за O(logN) по времени
Подсказка:используйте модификацию бинарного поиска в зависимости от того, какую позицию ищите
131/200
#medium
#leetcode34
34. Find First and Last Position of Element in Sorted Array
Если target не найдено в массиве, вернуть [-1, -1].
Необходимо реализовать решение за O(logN) по времени
Подсказка:
131/200
#medium
#leetcode34
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(logn)
Space: O(1)
▫️Используем обычный бинарный поиск, но передаем булевый параметр, который показывает какой элемент мы ищем (первый или последний):
- если он равен true, значит после равенства mid и target сдвигаемся влево для поиска первого элемента
- иначе — вправо
▫️Данный алгоритм можно хорошо понять на примере:
nums = [8, 8, 8, 8, 8], target = 8
#solution34
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Medium
179. Largest Number
📰 Дан массив неотрицательных целых чисел, расположите их так, чтобы они образовали наибольшее число и верните его в виде строки
Подсказка:используйте факт, что если для чисел A, B — AB > BA, тогда ACB > BCA для любого C
132/200
#medium
#leetcode179
179. Largest Number
Подсказка:
132/200
#medium
#leetcode179
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(nlogn)
Space: O(n)
▫️Инициализируем и заполняем массив строковых представлений чисел заданного массива
▫️Затем сортируем его, используя свой компаратор, который сравнивает порядок соединения чисел и выбирает больший результат
▫️В конце просто проходимся по всему отсортированному массиву и соединяем строковые представления чисел
#solution179
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Medium
162. Find Peak Element
📰 Дан целочисленный массив, найти пиковый элемент и вернуть его индекс. Если массив содержит несколько пиков, вернуть индекс любого.
Пиковый элемент — это элемент, который строго больше своих соседей.
Необходимо реализовать решение за O(logN) по времени
Подсказка:используйте бинарный поиск с особым передвижением указателей
133/200
#medium
#leetcode162
162. Find Peak Element
Пиковый элемент — это элемент, который строго больше своих соседей.
Необходимо реализовать решение за O(logN) по времени
Подсказка:
133/200
#medium
#leetcode162
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(logn)
Space: O(1)
▫️Используем обычный бинарный поиск, но после вычисления mid передвигаем указатели следующим образом:
- если следующий элемент меньше текущего, значит ищем пиковый элемент слева и передвигаем указатель R
- иначе — справа и передвигаем указатель L
▫️Если указатели совпали, значит элемент найден и можно возвращать ответ
Пример для nums = [1, 2, 3, 1]:
1, 2, 3, 1 —>
L M R
1, 2, 3, 1 —>
L R
M
1, 2, 3, 1
L
R
M
#solution162
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Medium
395. Longest Substring with At Least K Repeating Characters
📰 Для заданной строки S и целого числа K вернуть длину самой длинной подстроки, такой, что частота каждого символа в этой подстроке больше или равна k
Подсказка:подсчитывайте частоту символов, а затем проверяйте подстроки, разделенные на символе, не удовлетворяющем условию
134/200
#medium
#leetcode395
395. Longest Substring with At Least K Repeating Characters
Подсказка:
134/200
#medium
#leetcode395
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n^2)
Space: O(n)
▫️Инициализируем массив частот символов и заполняем его, проходя по строке
▫️Затем снова проходим по строке и, если частота символа меньше k — разделяем строку на две части и вычисляем результат для каждой из них, рекурсивно вызывая исходную функцию
▫️В результате получим ответ, представляющий собой максимальный из разделенных частей строки или всю длину строки, если все символы встречаются хотя бы k раз
#solution395
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Medium
334. Increasing Triplet Subsequence
📰 Дан целочисленный массив nums, вернуть true, eсли существует тройка индексов (i, j, k) такая, что i < j < k и nums[i] < nums[j] < nums[k]
Подсказка:используйте жадный подход, постоянно обновляя первый и второй элемент в тройке
135/200
#medium
#leetcode334
334. Increasing Triplet Subsequence
Подсказка:
135/200
#medium
#leetcode334
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
▫️Инициализируем первый и второй элемент тройки, как "бесконечность"
▫️Проходим по массиву и сравниваем текущий элемент с сохраненными элементами тройки:
- если текущий элемент меньше первого в тройке — обновляем его
- если меньше второго — обновляем его
- иначе мы нашли ответ, так как тройка удовлетворяет условию
▫️Таким образом, мы используем жадный подход, отслеживая два минимальных элемента в тройке и, если находится элемент больше, значит результат получен
#solution334
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🔴 Hard
44. Wildcard Matching
📰 Для входной строки s и шаблона p реализуйте сопоставление, где:
'?' — cоответствует любому отдельному символу;
'*' — соответствует любой последовательности символов (включая пустую последовательность);
Сопоставление должно охватывать всю входную строку (не частично)
Подсказка: запоминая позицию '*', проверяйте два случая: замена ее на пустую и заполненную последовательность
136/200
#hard
#leetcode44
44. Wildcard Matching
'?' — cоответствует любому отдельному символу;
'*' — соответствует любой последовательности символов (включая пустую последовательность);
Сопоставление должно охватывать всю входную строку (не частично)
Подсказка:
136/200
#hard
#leetcode44
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(nm)
Space: O(1)
s = "abcabczzzde", p = "*abc???de*"
#solution44
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Medium
64. Minimum Path Sum
📰 Для заданной матрицы найдите путь из левого верхнего угла в правый нижний с минимальной суммой всех чисел, при этом двигаясь только вниз или вправо
Подсказка:используйте динамическое программирование
137/200
#medium
#leetcode64
64. Minimum Path Sum
Подсказка:
137/200
#medium
#leetcode64
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(nm)
Space: O(1)
#solution64
Please open Telegram to view this post
VIEW IN TELEGRAM
🟡 Medium
454. 4Sum II
📰 Даны четыре целочисленных массива, все имеют длину n, вернуть количество четверок индексов (i, j, k, l), таких что:
▫ 0 <= i, j, k, l < n
▫ nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
Подсказка:используйте HashMap
138/200
#medium
#leetcode454
454. 4Sum II
Подсказка:
138/200
#medium
#leetcode454
Please open Telegram to view this post
VIEW IN TELEGRAM