目录
- 题目描述:
- 示例 1:
- 示例 2:
- 代码实现:
题目描述:
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的子数组[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4]
输出:1
代码实现:
class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;// 数组长度int ans = Integer.MAX_VALUE;// 设置为整型类型的最大值int sum = 0;// 子区间求和int j = 0;// j为慢指针for (int i = 0; i < n; i++) {// i为快指针sum += nums[i];// 从j开始累加while (sum >= target) {// 当子区间求和 >= 目标值时ans = Math.min(ans, i - j + 1);// 计算当前区间元素个数的最小值sum -= nums[j];// 窗口滑动的时机:循环删除左端元素集合j++;// 慢指针跟进}}return ans == Integer.MAX_VALUE ? 0 : ans;// 如果ans发生了变化,输出ans,反之输出0}
}