724. Find Pivot Index
Company:
Индекс поворота — это индекс, для которого сумма всех чисел слева от индекса равна сумме всех чисел справа от индекса
#leetcode724 | #easy #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
1413. Minimum Value to Get Positive Step by Step Sum
Company:
#leetcode1413 | #easy #prefixsum
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
➖ необходимо, чтобы в любой момент текущая сумма была всегда больше 0, поэтому нужно найти минимальное значение, которое появляется при последовательном суммировании элементов и "компенсировать" его положительным начальным значением startValue на 1 больше
Please open Telegram to view this post
VIEW IN TELEGRAM
1422. Maximum Score After Splitting a String
Company:
Результатом разделения строки является количество нулей в левой подстроке плюс количество единиц в правой подстроке
#leetcode1422 | #easy #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
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