題目
給定一個含有 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;
}
}
//
結果:
基本都通過了,就是最後一個性能測試跪了,循環用的太多了,需要改進