Веб-версияОткрыть в Telegram

ПостЗадача: 1031. Maximum Sum of Two Non-Overlapping Subarrays

7 сентября 2026
J
Java | LeetCode
Задача: 1031. Maximum Sum of Two Non-Overlapping Subarrays Сложность: medium Если задан целочисленный массив nums и два целых числа firstLen и secondLen, верните максимальную сумму элементов в двух непересекающихся подмассивах с длинами firstLen и secondLen. Массив с длиной firstLen может находиться до или после массива с длиной secondLen, но они должны быть непересекающимися. Подмассив - это смежная часть массива. Пример: Input: nums = [0,6,5,2,2,5,1,9,4], firstLen = 1, secondLen = 2 Output: 20 👨‍💻 Алгоритм: 1⃣Предварительные вычисления: Вычислите сумму всех подмассивов длины firstLen и secondLen и сохраните их в списках. 2⃣Поиск максимальной суммы: Переберите все возможные позиции для подмассива длины firstLen и для каждого такого подмассива найдите максимальную сумму для подмассива длины secondLen, который не пересекается с текущим подмассивом длины firstLen. 3⃣Сравнение двух случаев: Рассмотрите оба случая: подмассив длины firstLen до подмассива длины secondLen и подмассив длины secondLen до подмассива длины firstLen. Найдите максимальную сумму для каждого случая. 😎 Решение: public class Solution { public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) { return Math.max(maxSumNonOverlap(nums, firstLen, secondLen), maxSumNonOverlap(reverse(nums), secondLen, firstLen)); } private int maxSumNonOverlap(int[] nums, int firstLen, int secondLen) { int n = nums.length; int[] prefix = new int[n + 1]; for (int i = 0; i < n; ++i) { prefix[i + 1] = prefix[i] + nums[i]; } int[] maxFirst = new int[n]; for (int i = firstLen - 1; i < n; ++i) { maxFirst[i] = Math.max((i > 0 ? maxFirst[i - 1] : 0), prefix[i + 1] - prefix[i + 1 - firstLen]); } int[] maxSecond = new int[n]; for (int i = secondLen - 1; i < n; ++i) { maxSecond[i] = Math.max((i > 0 ? maxSecond[i - 1] : 0), prefix[i + 1] - prefix[i + 1 - secondLen]); } int maxSum = 0; for (int i = firstLen + secondLen - 1; i < n; ++i) { maxSum = Math.max(maxSum, maxFirst[i - secondLen] + (prefix[i + 1] - prefix[i + 1 - secondLen])); } return maxSum; } private int[] reverse(int[] nums) { int n = nums.length; int[] reversed = new int[n]; for (int i = 0; i < n; ++i) { reversed[i] = nums[n - i - 1]; } return reversed; } } Ставь 👍 и забирай 📚 Базу знаний
1 · 416 ·

Рядом в ленте

JJava | LeetCodeЗадача: 999. Available Captures for Rook Сложность: easy Вам дана матрица 8 x 8, изображающая шахматную доску. На ней есть ровно одна белая ладья, представленнаJJava | LeetCodeЗадача: 861. Score After Flipping Matrix Сложность: hard Дан целочисленный массив nums и целое число k. Верните длину самой короткой непустой подмассива nums, с
это сообщение
JJava | LeetCodeЗадача: 1242. Web Crawler Multithreaded Сложность: medium Учитывая URL startUrl и интерфейс HtmlParser, реализуйте многопоточный веб-краулер, который будет просJJava | LeetCodeЗадача: 657. Robot Return to Origin Сложность: easy На плоскости с координатами (0, 0) находится робот. Дана последовательность его движений, определите, возвра
JJava | LeetCodeJava | LeetCode@easy_java_task · канал · Технологии
6 450подписчиков410средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем