当前位置: 首页 > news >正文

寻找连续区间(C 语言)【数组区间处理】

题目来自于博主算法大师的专栏:最新华为OD机试C卷+AB卷+OJ(C++JavaJSPy) https://blog.csdn.net/banxia_frontend/category_12225173.html

题目

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

输入

第一行两个整数 N x (0 < N <= 100000 ,0 <= x <= 10000000)
第二行有 N 个正整数(每个正整数小于等于 100 )。

输出

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

示例一

输入

3 7
3 4 7

输出

4

说明

3+4 4+7 3+4+7 7 这四组数据都是大于等于 7 的,所以答案为 4

示例二

输入

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

输出

0

思路

解题思路:

  1. 读取输入

    • 首先,程序读取两个整数 Nx,其中 N 代表数组的长度,x 是我们需要找的连续区间和的最小值。
    • 然后,读取并存储包含 N 个正整数的数组 nums
  2. 遍历数组寻找满足条件的区间

    • 使用两层循环遍历数组。外层循环以数组中的每个元素作为可能的连续子数组的起始点(索引 i)。
    • 内层循环计算从当前起始点 i 到后续任意一个位置 j 的连续子数组的和(用变量 sum 存储)。
  3. 判断并累加满足条件的区间数

    • 在内层循环中,每当子数组的和 sum 大于等于给定的目标值 x 时,说明找到了一个符合条件的连续子数组。
    • 此时,我们将满足条件的连续子数组个数(从i到j,从i到j+1,从i到j+2,……,从i到n-1,这些区间都满足,即:(n-1 )- j+1个区间)累加到结果变量 res 中。
    • 找到一个满足条件的子数组后,跳出内层循环,继续检查下一个可能的起始点。
  4. 输出结果

    • 遍历完成后,输出结果变量 res,它记录了所有满足条件的连续区间的个数。

通过这种方法,我们可以确保找到所有满足条件的连续子数组,并正确统计其数量。

代码

#include <stdio.h>
#include <stdlib.h>int main() {// 输入部分:读取数组长度 N 和目标数值 xint n, x;scanf("%d %d", &n, &x);// 初始化一个大小为 N 的数组 nums 来存储输入的正整数int nums[n];// 读取并存储 N 个正整数for (int i = 0; i < n; i++) {scanf("%d", &nums[i]);}// 初始化结果变量 res,用于记录满足条件的连续区间的个数int res = 0;// 外层循环遍历数组中的每个元素作为可能的连续子数组的起始点(索引 i)for (int i = 0; i < n; i++) {   // 内层循环计算以 i 为起点的连续子数组的和(sum)int sum = 0;for (int j = i; j < n; j++) {// 累加当前元素到 sum 中sum += nums[j];// 当子数组和 sum 大于等于目标值 x 时if (sum >= x) {// 计算满足条件的连续子数组个数,并累加到 res 中// 由于子数组是连续的正整数,因此满足条件的子数组个数为剩余元素个数(n - j)res += n - j;// 找到一个满足条件的子数组后,跳出内层循环,继续检查下一个起始点break;}}}// 输出满足条件的连续子数组个数printf("%d\n", res);// 程序执行完毕,返回 0return 0;
}

相关文章:

  • Maven管理项目,本地仓库有对应的jar包,但还是报找不到
  • 30天自制操作系统(第21天)
  • vue-router4 (六) 命名视图
  • 在SAP HANA中使用OData(二)
  • 矩阵的范数 matrix norm Frobenius norm 弗罗贝尼乌斯 范数
  • vscode与vue/react环境配置
  • Langchain 加载网络信息实现RAG以及UnstructuredURLLoader的使用
  • MCU最小系统电路设计(以STM32F103C8T6为例)
  • Unity接入SQLite (三):C#封装SQL命令
  • 蓝桥杯倒计时47天!DFS基础——图的遍历
  • 如何将域名解析成IP地址?
  • EfficientSAM | 借助MIM机制,MetaAI让SAM更高效!
  • 编程笔记 html5cssjs 092 JavaScript 表单控件
  • 防火墙的内容安全
  • 顶顶通呼叫中心中间件-如何使处于机器人话术中的通话手动转接到坐席分机上讲解(mod_cti基于FreeSWITCH)
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • co模块的前端实现
  • create-react-app做的留言板
  • Hexo+码云+git快速搭建免费的静态Blog
  • java8 Stream Pipelines 浅析
  • learning koa2.x
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Node项目之评分系统(二)- 数据库设计
  • PaddlePaddle-GitHub的正确打开姿势
  • vue数据传递--我有特殊的实现技巧
  • 力扣(LeetCode)56
  • 码农张的Bug人生 - 初来乍到
  • 删除表内多余的重复数据
  • 自制字幕遮挡器
  • k8s使用glusterfs实现动态持久化存储
  • (11)MSP430F5529 定时器B
  • (30)数组元素和与数字和的绝对差
  • (C)一些题4
  • (C语言)fgets与fputs函数详解
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Note)C++中的继承方式
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)计算机毕业设计高校学生选课系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (南京观海微电子)——I3C协议介绍
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)setTimeout 和 setInterval 的区别
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)重识new
  • (转载)深入super,看Python如何解决钻石继承难题
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net8 Blazor 尝鲜
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET值类型变量“活”在哪?
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @SentinelResource详解
  • [].slice.call()将类数组转化为真正的数组