974. Subarray Sums Divisible by K
Company:
#leetcode974 | #medium #prefixsum
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(k)
(prefix[j] – prefix[i]) % k = 0, что можно записать как prefix[j] % k = prefix[i] % k, то есть нужно найти, сколько раз встречались одинаковые остатки от деления префиксных сумм на kprefix = (prefix + num % k + k) % k, где +k необходимо, чтобы обработать отрицательные значенияPlease open Telegram to view this post
VIEW IN TELEGRAM
2270. Number of Ways to Split Array
Company:
Допустимое разделение — сумма элементов от начала массива до индекса i больше или равна сумме элементов от i + 1 до конца, при этом правая часть не должна быть пустой
#leetcode2270 | #medium #prefixsum
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
Please open Telegram to view this post
VIEW IN TELEGRAM
3355. Zero Array Transformation I
Company:
Для каждого queries[i] уменьшите все элементы подмассива в диапазоне [li, ri] на 1, при этом элемент не может стать меньше нуля.
Верните true, если после обработки всех запросов все элементы в массиве будут равны 0
#leetcode3355 | #medium #prefixsum
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n + m)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
3026. Maximum Good Subarray Sum
Company:
Верните максимальную сумму хорошего подмассива
#leetcode3026 | #medium #prefixsum
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
798. Smallest Rotation with Highest Score
Верните число k, которое соответствует наивысшему результату, который можно получить после применения поворота. Если есть несколько ответов, верните наименьшее k
#leetcode798 | #hard #prefixsum
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
k = (i - nums[i] + 1 + n) % n, а затем уменьшаем diff[k] на 1, чтобы учесть, что при таком сдвиге баллы уменьшаются❔ Почему k вычисляется именно так?▫ i: исходная позиция элемента▫ - nums[i]: смещаемся назад настолько, насколько велик сам элемент▫ + 1: смещаемся еще на одну позицию, чтобы теперь элемент не давал баллы▫ + n: гарантируем, что выражение не будет отрицательным▫ % n: берем по модулю, чтобы остаться в пределах массива❔ Почему изменения для каждого сдвига суммируются?➖ вычисляя k, мы определяем самую правую позицию, в которой данный элемент не приносит баллы, соответственно при большем сдвиге он сдвигается левее, где также не будет приносить баллы, поэтому мы последовательно суммируем изменения для каждого сдвига. При этом мы учитываем, что массив цикличный, на каждом шаге добавляя в cur +1 для элемента, который перешел в конец массива
Please open Telegram to view this post
VIEW IN TELEGRAM
Представим, что ты следишь за своими расходами и всегда хочешь знать, сколько денег ты потратил за последние 7 дней.
Вместо того, чтобы каждый день пересчитывать все с нуля, ты хранишь текущую сумму за последние 7 дней, каждый день добавляешь новую трату и вычитаешь трату, которая была 8 дней назад.
Таким образом, у тебя всегда актуальная сумма за последние 7 дней без необходимости считать ее всю постоянно.
#slidingwindow
Please open Telegram to view this post
VIEW IN TELEGRAM
1652. Defuse the Bomb
Company:
Необходимо заменить каждый элемент по следующим правилам:
Массив code является круговым, поэтому следующим элементом code[n-1] является code[0], а предыдущим элементом code[0] является code[n-1].
Верните полученный массив
#leetcode1652 | #easy #slidingwindow
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
▫ из текущей суммы вычитаем элемент на позиции старта окна (start % n) и добавляем элемент следующий после конца ((end + 1) % n), то есть считаем сумму для следующего окна, меняя только границы, при этом все содержимое между остается неизменным, поэтому мы получаем ее правильно▫ затем увеличиваем указатели start и end, фактически передвигая окно на следующую позицию
Please open Telegram to view this post
VIEW IN TELEGRAM
2379. Minimum Recolors to Get K Consecutive Black Blocks
Company:
За одну операцию вы можете перекрасить белый блок в черный.
Верните минимальное количество операций, необходимое для того, чтобы было хотя бы одно вхождение последовательных k черных блоков
#leetcode2379 | #easy #slidingwindow
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
Please open Telegram to view this post
VIEW IN TELEGRAM
2516. Take K of Each Character From Left and Right
Company:
Верните минимальное количество минут, необходимое для того, чтобы взять не меньше k каждого символа или -1, если это невозможно
#leetcode2516 | #medium #slidingwindow
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
🟦 для решения будем искать самое большое окно из символов такое, что в оставшейся части строки (слева и справа) будут символы, которые удовлетворяют условию по количеству, а затем вычтем его из длины строки
Please open Telegram to view this post
VIEW IN TELEGRAM
2461. Maximum Sum of Distinct Subarrays With Length K
Company:
Найдите максимальную сумму подмассива длиной k, в котором все элементы различны
#leetcode2461 | #medium #slidingwindow
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
2134. Minimum Swaps to Group All 1's Together II
Company:
#leetcode2134 | #medium #slidingwindow
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
🟦 поскольку сгруппировать единицы можно в любом месте, нужно найти такое окно размером общего количества единиц, в котором будет меньше всего позиций для перестановок, то есть нулей
Please open Telegram to view this post
VIEW IN TELEGRAM