LeetCode 209. 长度最小的子数组(JAVA)

作者: freesan44 | 来源:发表于2020-06-19 10:49 被阅读0次

    题目

    给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。

    示例: 
    
    输入: s = 7, nums = [2,3,1,2,4,3]
    输出: 2
    解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。
    

    进阶:

    如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。

    解题思路

    public int minSubArrayLen(int s, int[] nums) {
            //双浮动指针
            int minRet = Integer.MAX_VALUE;
            if (minRet <= 0){
                return 0;
            }
            int left = 0;
            int right = left;
            int subSumRet = nums[left];
            while (right <= nums.length-1){
    //            System.out.println(left + " " + right + " subSum:" + subSumRet);
                //子数组少于目标数
                if (subSumRet<s){
                    right++;
                    //防止数组越界
                    if (right >=nums.length){
                        return 0;
                    }
                    subSumRet += nums[right];
                }else
                {
                    int[] subArr = Arrays.copyOfRange(nums, left, right+1);
                    minRet = Math.min(minRet, subArr.length);
    //                System.out.println(Arrays.toString(subArr) + " " + minRet);
    
                    int tempSumRet = subSumRet - nums[left];
    //                System.out.println("tempSubRet:"+tempSumRet);
                    //如果减左没法维持目标数就右增,否则就左减
                    if (tempSumRet >=s && subArr.length>1)
                    {
                        left++;
                        subSumRet = tempSumRet;
                    }
                    else
                    {
                        right++;
                        //防止数组越界
                        if (right >=nums.length){
                            continue;
                        }
                        subSumRet += nums[right];
                    }
    
                }
            }
            return minRet;
        }
    

    相关文章

      网友评论

        本文标题:LeetCode 209. 长度最小的子数组(JAVA)

        本文链接:https://www.haomeiwen.com/subject/uehvxktx.html