当前位置: 首页> 财经> 创投人物 > 小程序代运营_广州展厅设计_2345浏览器网页版_网络域名怎么查

小程序代运营_广州展厅设计_2345浏览器网页版_网络域名怎么查

时间:2025/8/23 13:07:55来源:https://blog.csdn.net/TangKenny/article/details/143368179 浏览次数:0次
小程序代运营_广州展厅设计_2345浏览器网页版_网络域名怎么查

题目描述

给定一个含有N个正整数的数组,求出有多少个连续区间(包括单个正整数),它们的和大于等于x。

输入描述

第一行两个整数 N , x ( 0 < N < = 100000 , 0 < = x < = 10000000 ) N,x\ (0<N<= 100000,0<=x<= 10000000) N,x (0<N<=100000,0<=x<=10000000)

第二行有 N N N个正整数(每个正整数小于等于100)。

输出描述

输出一个整数,表示所求的个数。

注意:此题对效率有要求,暴力解法通过率不高,请考虑 高效的实现方式。

示例1

输入

3 7
3 4 7

输出

4

说明

第一行的3表示第二行数组输入3个数,第一行的7是比较数,用于判断连续数组是否大于该数:组合为3+4;3+4+7;4+7;7; 都大于等于指定的7:所以共四组。

示例2

输入

10 10000
1 2 3 4 5 6 7 8 9 10

输出

0

说明

所有元素的和小于10000,所以返回0。

题解

利用滑动窗口处理,
当滑动窗口的值大于等于给定值的时候,从right边界空时的数组都会大于给定值,连续数组的数量为 length - right + 1
然后移动左边界,重复上述判断

源码

public class ConsectiveArr {static Input input;static {input = new Input("3 7\n" +"3 4 7");input = new Input("10 10000\n" +"1 2 3 4 5 6 7 8 9 10");}public static void main(String[] args) {String[] ss = input.nextLine().split(" ");int length = Integer.parseInt(ss[0]);int sum = Integer.parseInt(ss[1]);String[] arr = input.nextLine().split(" ");int[] intArr = new int[length];int min = Integer.MAX_VALUE;for (int i = 0; i < length; i++) {intArr[i] = Integer.parseInt(arr[i]);min = Math.min(min, intArr[i]);}if (min >= sum) {int count = 0;for (int i = 1; i <= length; i++) {count += i ;}System.out.println(count);return;}int left = 0;int right = 0;int result = 0;int windowSum = intArr[0];while (right < length) {if (windowSum>=sum) {result += length - right + 1;windowSum -= intArr[left];left++;continue;}windowSum += intArr[right];right++;}System.out.println(result);}
}
关键字:小程序代运营_广州展厅设计_2345浏览器网页版_网络域名怎么查

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: