系列文章目录
前言
本人最近再练习算法,所以会发布一些解题思路,希望大家多指教
一、题目描述
给定一个含有N个正整数的数组,求出有多少连续区间(包括单个正整数),它们的和大于等于 x。
二、输入描述
第一行为两个整数 N,x。(0<N≤100000, 0≤x≤10000000)
第二行有 N 个正整数 (每个正整数小于等于 100)。
三、输出描述
输出一个整数,表示所求的个数
注意:此题对效率有要求,暴力解法通过率不高,请考虑
四、java代码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] line = sc.nextLine().split(" ");
int N = Integer.parseInt(line[0]);
int x = Integer.parseInt(line[1]);
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
//初始化符合要求的连续空间的个数
int time = 0;
for (int i = 0; i < arr.length; i++) {
//如果当前元素大于x,则往后的连续区间和肯定大于x,所以跳过循环,直接计算区间个数
if(arr[i] >= x) {
time += arr.length -i;
} else {
//当前元素小于x,则求出区间和大于等于x的区间
int j = i+1;
int sum = arr[i];
while (j<arr.length) {
sum = sum + arr[j];
if(sum >= x){
//得到第一个区间和大于x,则往后区间和肯定大于x,所以跳过循环,直接计算区间个数
time += arr.length - j;
break;
}
j++;
}
}
}
System.out.println(time);
}
五、测试用例
输入:
7 7
2 3 4 7 5 9 1
输出: