题目
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。
示例:
输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。
代码
//输入: s = 7, nums = [2,3,1,2,4,3]
//输出: 2
//解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。
public class MyTest10 {
public static void main(String[] args) {
int[] nums={2,3,1,2,3,3};
int s=9;
int i = minSubArrayLen(s, nums);
System.out.println(i);
}
public static int minSubArrayLen(int s, int[] nums) {
// 当输入为空数组时则需要返回0;
// 区别null和length=0的区别
// (https://blog.csdn.net/u012156116/article/details/79690277)
if (nums==null||nums.length==0){
return 0;
}
// 滑窗的大小
for (int i = 1; i <=nums.length; i++) {
// 滑窗移动
for (int j = 0; j <=nums.length-i; j++) {
int sum=0;
// 滑窗内求和
for (int k = j; k <j+i; k++) {
sum+=nums[k];
}
if (sum>=s){
return i;
}
}
}
// 如果出现3 [1,1] 时则需要返回值0
return 0;
}
}
//
结果:
基本都通过了,就是最后一个性能测试跪了,循环用的太多了,需要改进