Учебный код на Java (серия из 8 частей)
public class Solution { public int minSubArrayLen(int s, int[] nums) { if (nums == null || nums.length == 0) { return 0; } int sum = 0; int ans = Integer.MAX_VALUE; for (int l = 0, r = 0; r < nums.length; r++) { sum += nums[r]; while (sum >= s) { ans = Math.min(ans, r - l + 1); sum -= nums[l++]; } } return ans == Integer.MAX_VALUE ? 0 : ans; } }
Эта проблема решается с помощью двух указателей l
и r
. В цикле for мы постепенно добавляем элемент в r
в сумма
. Всякий раз, когда сумма
больше или равна s
, , мы вычисляем расстояние между двумя указателями (
r – l + 1 ) , и если расстояние меньше
, то ,
, мы обновляем и
с расстоянием. Затем вычтите элемент в l
от суммы
и увеличения
Временная сложность : O(n)
Дополнительное пространство : O(1)
Учебный код на Java (серия из 8 частей)
Оригинал: “https://dev.to/algobot76/leetcode-in-java-209-e38”