https://leetcode.cn/problems/minimum-size-subarray-sum/
我是菜比,只能想到个这😅
暴力解法
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int min = Integer.MAX_VALUE;
for(int i = 0;i < nums.length;i++) {
int sum = nums[i];
if(sum >= target) return 1;
for(int j = i+1;j<nums.length;j++){
sum+=nums[j];
if(sum >= target) {
min = Math.min(min,j-i+1);
break;
}
}
}
return min == Integer.MAX_VALUE ? 0 : min;
}
}
双指针解法
class Solution {
public int minSubArrayLen(int target, int[] nums) {
//left 为指向起始位置的指针
int left = 0 ;
int sum = 0; //记录滑动窗口中的元素的总值
int result = Integer.MAX_VALUE; //定义一个较大数值--方便后续比较--类.方法 常量大写
//right 为指向终止位置的指针
for(int right = 0 ; right < nums.length ; right ++){
sum += nums[right];
while(sum >= target){
int subl = right - left + 1 ; //获取子串长度--变量定义后才可使用
result = Math.min(result , subl);
sum = sum - nums[left];
//sum -= sum[right]
left ++ ;
}
}
return result == Integer.MAX_VALUE ? 0 :result ; //双等于号判断 单等于号为 赋值
}
}