Перейти к содержимому

Самый длинный подмассив, сумма которого делится на K, с не более чем одной инверсией знака I | Пр...

Manjeet Dhayal

0:00 / 0:00

Самый длинный подмассив, сумма которого делится на K, с не более чем одной инверсией знака I | Пр...

407 просмотров · 2 недели назад
Manjeet Dhayal
161 подписчик
407 просмотров · 2 недели назад
LeetCode 4063 - Самый длинный подмассив, делящийся на K, с не более чем одним отрицанием I | Еженедельный конкурс 192 В этом видео мы решаем задачу LeetCode 4063: Самый длинный подмассив, делящийся на K, с не более чем одним отрицанием I. Ключевой момент — сосредоточиться на ограничениях. n = 1000, поэтому решение O(N²) вполне подходит. Не более одного значения может быть отрицательным. Идея проста: 1. Отрицать каждый индекс по очереди. 2. Для каждого измененного массива найти самый длинный подмассив, сумма которого делится на k. 3. Взять максимальный ответ. Как найти самый длинный подмассив, сумма которого делится на k? Используя префиксную сумму + HashMap. Если две префиксные суммы имеют одинаковый остаток по модулю k, то сумма подмассива между ними делится на k. Для максимальной длины мы сохраняем самый ранний индекс, где встречается каждый остаток. Для каждого индекса: rem = ((sum % k) + k) % k Мы используем +k, потому что префиксная сумма может стать отрицательной после отрицания. Если остаток уже существует в HashMap: length = i - firstIndex[rem] В противном случае, сохраняем текущий индекс как первое вхождение этого остатка. Временная сложность: O(N²) Пространственная сложность: O(N) LeetCode 4063 Самый длинный подмассив, делящийся на K Префиксная сумма + HashMap Еженедельный конкурс 192 #leetcode #leetcode4063 #biweeklycontest192 #prefixsum #hashmap #competitiveprogramming #softwareengineering #techinterviewprep