Учебный код на 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”