宁夏做网站,活动推广文案,南昌网站建设制作与维护,南通制作手机网站华为OD机试 2024C卷题库疯狂收录中#xff0c;刷题点这里 专栏导读
本专栏收录于《华为OD机试#xff08;JAVA#xff09;真题#xff08;A卷B卷C卷#xff09;》。
刷的越多#xff0c;抽中的概率越大#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试… 华为OD机试 2024C卷题库疯狂收录中刷题点这里 专栏导读
本专栏收录于《华为OD机试JAVA真题A卷B卷C卷》。
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
一、题目描述
给定一个含有N个正整数的数组求出有多少连续区间包括单个正整数它们的和大于等于 x。
二、输入描述
第一行为两个整数 N,x。(0N≤100000, 0≤x≤10000000)
第二行有 N 个正整数 每个正整数小于等于 100。
三、输出描述
输出一个整数表示所求的个数
注意此题对效率有要求暴力解法通过率不高请考虑高效的实现方式。
1、输入
3 7 3 4 7
2、输出
4
3、说明
第一行的 3表示第二行数组输入3个数第一行的7是比较数用于判断连续数组是否大于该数 组合为 34,347,47,7都大于等于指定的7所以共四组。
四、解题思路
通过滑动窗口的方式解题。
核心思路
遍历数组向右扩展窗口left右移缩小窗口 left右移后减去left处的值就是left到right的区间和再通过区间和去和x比较如果还是大于x则left继续右移满足条件的连续区间个数1
五、Java算法源码
public class Test05 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取输入int N scanner.nextInt(); // 数组长度int x scanner.nextInt(); // 目标和int[] nums new int[N]; // 存储数组元素for (int i 0; i N; i) {nums[i] scanner.nextInt(); // 读取数组元素}int left 0; // 左指针int right 0; // 右指针int sum 0; // 当前窗口内元素的和int count 0; // 满足条件的连续区间个数// 遍历数组while (right N) {// 向右扩展窗口sum nums[right];int tempSum sum;// left右移缩小窗口while (tempSum x left right) {// left右移后减去left处的值就是left到right的区间和// 再通过区间和去和x比较如果还是大于x则left继续右移tempSum - nums[left];left;// 满足条件的连续区间个数1count;}left 0;right;}// 输出结果System.out.println(count);}
}
六、效果展示
1、输入
4 7 2 3 4 7
2、输出
6
3、说明
符合要求的连续区间
234、2347、34、347、47、7 下一篇华为OD机试 - 简易内存池 - 逻辑分析Java 2024 C卷 200分
本文收录于华为OD机试JAVA真题A卷B卷C卷
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。