标签:运行 src int void 存在 窗口 长度 图片 示例
package shuangzhizhen;
/*
209. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
解题思路:
双指针
*/
public class p209 {
public static int minSubArrayLen(int s, int[] nums) {
if (nums.length == 1 && nums[0] < s) return 0;
int ans = 0;
for (int i = 0; i < nums.length; i++) {
ans += nums[i];
}
if (ans < s) return 0;
int len = nums.length;
int left = 0, right = 0;
int tmp = 0, res = len;
while (right<len) {
tmp += nums[right];
//System.out.println("--------------");
//此时窗口已经大于等于S了,此时移动left指针
while (left <= right && tmp >= s) {
res = Math.min(res, right - left + 1);
tmp -= nums[left];
//System.out.println(nums[left]);
left++;
}
right++;
}
return res;
}
public static void main(String[] args) {
int nums[]={2,3,1,2,4,3};
System.out.println(minSubArrayLen(7,nums));
}
}
运行结果:

标签:运行 src int void 存在 窗口 长度 图片 示例
原文地址:https://www.cnblogs.com/jifeng0902/p/13289194.html