算法学习之路:长度最小的子数组

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

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

这题最简单快速的方法就是使用双指针方式解答,题目和思路都没啥难点,直接上代码

package com.ucarinc.wtf.demo;

/**
 * @Package: com.ucarinc.wtf.demo
 * @ClassName: MinSubArrayLen
 * @Author: [email protected]
 * @Description: 长度最小的子数组
 * @Date: 2020/6/28 15:22
 * @Version: 1.0
 */
public class MinSubArrayLen {
    public static int minSubArrayLen(int s, int[] nums) {
        if (nums.length == 0){
            return 0;
        }
        int minLength = 0;
        int sum = nums[0];
        int i = 0,j = 0;
        do {
            if (sum >= s){
                if (minLength == 0){
                    minLength = i-j+1;
                }else {
                    minLength = Math.min(i-j+1,minLength);
                }
                sum -= nums[j];
                j++;
            }else {
                i++;
                if (i >= nums.length){
                    break;
                }
                sum += nums[i];
            }
        }while (true);
        return minLength;
    }
}

 

你可能感兴趣的:(算法学习之路:长度最小的子数组)