在一个正整数数组中找到最小长度的连续子数组,使子数组元素之后>= 给定值
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);
}
}
}
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);
}
}
}
全部评论
相关推荐
03-04 17:32
上海新闻出版职业技术学校 Java 点赞 评论 收藏
分享
查看7道真题和解析