长度最小的子数组
【题目描述】
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
示例:
输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3]是该条件下的长度最小的连续子数组。
【算法实现】
算法思路:双指针的实现,类似于一个滑动窗口。
package p1;
/**
* 长度最小的子数组
* @author Guozhu Zhu
* @date 2019/5/19
* @version 1.0
*/
public class MinLengthOfSubArr {
public static void main(String[] args) {
int[] arr = {2,3,1,2,4,3};
int res = solution01(arr, 7);
System.out.println("长度最小的子数组" + res);
}
public static int solution01(int[] arr, int s) {
if (arr == null || arr.length == 0) {
return 0;
}
int left = 0;
int right = -1;
int sum = 0;
int res = arr.length+1;
while (left < arr.length) {
if (right+1 < arr.length && sum < s) {
right++;
sum += arr[right];
} else {
sum -= arr[left++];
}
if (sum >= s) {
res = Math.min(res, right-left+1);
}
}
return (res == arr.length+1) ? 0 : res;
}
}
【执行结果】