J
Java | LeetCode
@easy_java_task6.8K подп.
494просмотров
7.3%от подписчиков
20 марта 2026 г.
statsScore: 543
Задача: 209. Minimum Size Subarray Sum Сложность: medium Дан массив положительных целых чисел nums и положительное целое число target. Верните минимальную длину подмассива, сумма которого больше или равна target. Если такого подмассива нет, верните 0. Пример: Input: target = 7, nums = [2,3,1,2,4,3] Output: 2 Explanation: The subarray [4,3] has the minimal length under the problem constraint. 👨‍💻 Алгоритм: 1⃣Инициализация переменных: Создайте три целочисленные переменные left, right и sumOfCurrentWindow. Переменные left и right формируют подмассив, указывая на начальные и конечные индексы текущего подмассива (или окна), а sumOfCurrentWindow хранит сумму этого окна. Инициализируйте все их значением 0. Создайте еще одну переменную res для хранения ответа на задачу. Инициализируйте ее большим целым значением. 2⃣Итерация по массиву: Итерируйте по массиву nums с помощью right, начиная с right = 0 до nums.length - 1, увеличивая right на 1 после каждой итерации. Выполняйте следующее внутри этой итерации: Добавьте элемент с индексом right к текущему окну, увеличив sumOfCurrentWindow на nums[right]. Проверьте, если sumOfCurrentWindow >= target. Если да, у нас есть подмассив, который удовлетворяет условию. В результате, попытайтесь обновить переменную ответа res длиной этого подмассива. Выполните res = min(res, right - left + 1). Затем удалите первый элемент из этого окна, уменьшив sumOfCurrentWindow на nums[left] и увеличив left на 1. Этот шаг повторяется во внутреннем цикле, пока sumOfCurrentWindow >= target. 3⃣Возврат результата: Текущая сумма окна теперь меньше target. Нужно добавить больше элементов в окно. В результате, увеличивается right на 1. Верните res. 😎 Решение: class Solution { public int minSubArrayLen(int target, int[] nums) { int left = 0, right = 0, sumOfCurrentWindow = 0; int res = Integer.MAX_VALUE; for(right = 0; right < nums.length; right++) { sumOfCurrentWindow += nums[right]; while (sumOfCurrentWindow >= target) { res = Math.min(res, right - left + 1); sumOfCurrentWindow -= nums[left++]; } } return res == Integer.MAX_VALUE ? 0 : res; } } Ставь 👍 и забирай 📚 Базу знаний
494
просмотров
2245
символов
Да
эмодзи
Нет
медиа

Другие посты @easy_java_task

Все посты канала →
Задача: 209. Minimum Size Subarray Sum Сложность: medium Дан — @easy_java_task | PostSniper