算法学习---长度最小的子数组

1.暴力双循环(双指针)

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
         int j=0;
        int sum;
        int begin=0;
        int end=nums.length;
        int flag=0;
        for(int i=0;i<nums.length;i++){
            j=i;
            sum=0;
            while(sum<target&&j<nums.length){
                sum=sum+nums[j];
                j++;
            }
            if(j-i<=end-begin&&sum>=target) {
                begin=i;
                end=j;
                flag=1;
            }

        }
        if(flag==0){
            return 0;
        }
        return end-begin;


    }
}

2.滑动窗口

 public int minSubArrayLen(int target, int[] nums) {
        int sum=0;
        int result=Integer.MAX_VALUE;
        int j=0;
        for(int i=0;i<nums.length;i++){
            sum=sum+nums[i];
            while(sum>=target){
                result=(result>i-j+1)?i-j+1:result;
                sum=sum-nums[j];
                j++;
            }

        }
        if(result==Integer.MAX_VALUE){
            return 0;
        }else {
            return result;
        }

    }

你可能感兴趣的:(算法,leetcode)