在一个正整数数组中找到最小长度的连续子数组,使子数组元素之后>= 给定值

import java.util.Scanner;

public class demo {
    public static void main(String[] args) {
        //长度最小的子数组
        //在一个正整数数组中找到最小长度的连续子数组,使子数组元素之后>= s
        Scanner sc = new Scanner(System.in);
        int s = sc.nextInt();
        sc.nextLine();//吃掉nextInt留下的回车符
        String str = sc.nextLine();//随后读取输入的数组
        String[] strs = str.split(" ");
        int[] arr = new int[strs.length];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(strs[i]);
        }

        int sum = 0;//窗口内元素之和
        int left = 0;//左窗口边界
        int minLength = Integer.MAX_VALUE;//最小长度初始化为最大整数
        for (int right = 0; right < arr.length; right++) {
            sum += arr[right];
            while (sum >= s) {//元素之和满足条件后,开始缩小左边界
                int currentLength = right - left + 1;//计算当前窗口长度
                minLength = Math.min(minLength,currentLength);
                sum -= arr[left];//将左边界元素移出窗口
                left++;
            }
        }
        //如果未找到返回0
        if (minLength == Integer.MAX_VALUE) {
            System.out.println(0);
        }
        else {
            System.out.println(minLength);
        }
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务