寻找连续区间(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,它记录了所有满足条件的连续区间的个数。

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

代码

c 复制代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    // 输入部分:读取数组长度 N 和目标数值 x
    int 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);

    // 程序执行完毕,返回 0
    return 0;
}
相关推荐
Ricardo-Yang9 分钟前
SCNP语义分割边缘logits策略
数据结构·人工智能·python·深度学习·算法
凌波粒10 分钟前
LeetCode--344.反转字符串(字符串/双指针法)
算法·leetcode·职场和发展
啊哦呃咦唔鱼18 分钟前
LeetCode hot100-543 二叉树的直径
算法·leetcode·职场和发展
soragui34 分钟前
【Python】第 4 章:Python 数据结构实现
数据结构·windows·python
sinat_286945191 小时前
harness engineering
人工智能·算法·chatgpt
少许极端1 小时前
算法奇妙屋(四十三)-贪心算法学习之路10
学习·算法·贪心算法
samroom1 小时前
【鸿蒙应用开发 Dev ECO Studio 5.0版本】从0到1!从无到有!最全!计算器------按钮动画、滑动退格、中缀表达式转后缀表达式、UI设计
数据结构·ui·华为·typescript·harmonyos·鸿蒙
算法鑫探1 小时前
10个数下标排序:最大值、最小值与平均值(下)
c语言·数据结构·算法·排序算法·新人首发
样例过了就是过了2 小时前
LeetCode热题100 爬楼梯
c++·算法·leetcode·动态规划
IronMurphy2 小时前
【算法三十七】51. N 皇后
算法·深度优先