class Solution {
// 方法 minSubArrayLen 接收一个整数 s 和一个整数数组 nums
// 返回和大于或等于 s 的最小子数组长度
public int minSubArrayLen(int s, int[] nums) {
int n = nums.length; // 获取数组的长度
// 如果数组为空,直接返回 0
if (n == 0) {
return 0;
}
// 初始化答案为最大整数,表示最小子数组的长度
int ans = Integer.MAX_VALUE;
// 初始化两个指针,分别为滑动窗口的左右边界
int start = 0, end = 0;
// 初始化当前窗口的总和
int sum = 0;
// 使用滑动窗口的方式,右边界 end 向右移动
while (end < n) {
sum += nums[end]; // 将当前元素加入总和
// 当当前窗口的和大于或等于目标值 s 时,尝试收缩窗口
while (sum >= s) {
// 更新答案为当前窗口长度的最小值
ans = Math.min(ans, end - start + 1);
sum -= nums[start]; // 从总和中减去左边界的元素
start++; // 移动左边界,缩小窗口
}
end++; // 移动右边界,扩展窗口
}
// 检查是否找到了符合条件的子数组,返回结果
return ans == Integer.MAX_VALUE ? 0 : ans; // 如果 ans 没有更新,返回 0,不然返回 ans
}
}