使用C++编写一个程序来找到具有给定范围内和的子数组的数量

使用c++编写一个程序来找到具有给定范围内和的子数组的数量

在本文中,我们将使用 C++ 程序求解总和在给定范围内的子数组的数量。我们有一个正整数数组 arr[] 和一个范围 {L, R},我们必须计算总和在给定范围 L 到 R 内的子数组的总数。所以这是该问题的简单示例 –

Input : arr[] = {1, 4, 6}, L = 3, R = 8Output : 3The subarrays are {1, 4}, {4}, {6}.Input : arr[] = {2, 3, 5, 8}, L = 4, R = 13Output : 6The subarrays are {2, 3}, {2, 3, 5}, {3, 5},{5}, {5, 8}, {8}.

寻找解决方案的方法

我们将解释使用 C++ 问题解决此问题的两种方法 –

暴力方法

最基本的暴力方法方法用于计算每个子数组的总和,然后查找该总和是否存在于给定范围内。 (但是这种方法会花费我们很多时间,因为它的时间复杂度是 O(n*n),其中 n 是数组的大小)。

高效的方法

节省现在,有效的方法是使用滑动窗口技术,使用这种技术,我们将在 O(n) 内更快或更有效地计算结果。

立即学习“C++免费学习笔记(深入)”;

示例

#include using namespace std;int subCount(int *arr, int n, int x){    int start = 0, end = 0, sum = 0, count = 0;    while (end < n){ // we will be moving right border in this loop        sum = sum + arr[end];        while(start = x){ // this loop will move our left border            sum = sum - arr[start]; // we will decrement sum while moving left border.                                   // For excluding the previous elements.            start++;                // and move the left border.        }        count = count + ((end - start) + 1); // counting the subarrays.        end++;    }    return count;}int main(){    int arr[] = { 1, 4, 6 };    int n = sizeof(arr) / sizeof(arr[0]);    int L = 3;    int R = 8;    int answer;    answer = subCount(arr, n, R)  - subCount(arr, n, (L - 1)); // Final Answer.    cout << answer << "n";    return 0;}

输出

3

上述代码说明

在这种方法中,我们计算总和小于给定范围上限的子数组的数量,然后减去总和小于给定范围上限的子数组的数量。使用 subcount 函数小于给定范围的下限。

Subcount 函数

该函数使用滑动窗口技术来查找计数小于 x 的子数组的计数.

首先,我们从“结束”和“开始”开始,其值均为 0。当我们遍历数组时,我们维护从头到尾的元素之和。之后,如果我们的开始等于结束并且总和大于或等于 x,我们开始移动开始并在从总和中取出元素时不断减少总和。

直到我们的总和变得小于 x 或者我们的开始变得大于结束。现在,我们将计数增加子数组计数,然后将右边界增加 1。现在,在外循环结束后,我们返回子数组的总计数。

结论

在本文中,我们使用滑动窗口技术解决了一个问题,即在 O(n) 时间复杂度内找到总和在给定范围内的子数组的数量。我们还从C++程序中学习了这个问题以及我们可以轻松解决这个问题的完整方法(正常且高效)。我们可以用其他语言(例如 C、java、python 等)编写相同的程序。

以上就是使用C++编写一个程序来找到具有给定范围内和的子数组的数量的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:13:52
下一篇 2025年12月12日 01:35:04

相关推荐

  • 使用C++编写,找到子数组中的质数数量

    在本文中,我们将描述查找子数组中素数数量的方法。我们有一个正数数组 arr[] 和 q 个查询,其中有两个整数表示我们的范围 {l, R},我们需要找到给定范围内的素数数量。下面是给定问题的示例 – Input : arr[] = {1, 2, 3, 4, 5, 6}, q = 1, L…

    2025年12月17日
    000
  • 将以下内容翻译为中文:C编程求和序列0.6、0.06、0.006、0.0006,…的前n项

    给定的级数 0.6,0 .o6,…. 是一个几何级数,其中每个元素都是前一个元素除以 10。因此,找到级数的总和,我们必须应用 r 的 GP one 公式的总和小于 1(在我们的例子中 r=0.1)。 Sum = 6/10 [1- (1/10)n/(1-1/10)]Sum = 6/9 […

    2025年12月17日
    000
  • C编程中的函数作用域规则是什么?

    本地作用域 本地作用域指定块内定义的变量仅在该块内可见,在块外不可见。 全局作用域 全局范围指定块外部定义的变量在程序结束之前都是可见的。 示例 #includeint r= 50; /* global area */main (){ int p = 30; printf (“p=%d,…

    2025年12月17日
    000
  • 使用C++编写代码,找到第N个非平方数

    我们都知道不是任何数字的平方的数字,如 2、3、5、7、8 等。非平方数有 N 个,不可能知道每个数字。因此,在本文中,我们将解释有关无平方数或非平方数的所有内容,以及在 C++ 中查找第 N 个非平方数的方法。 第 N 个非平方数 如果一个数是整数的平方,则该数被称为完全平方数。完全平方数的一些例…

    2025年12月17日
    000
  • 使用C++编写,找到前三个项为等差数列,后三个项为等比数列的四元组数量

    在本文中,我们将描述查找四元数的所有可能方法,其中前 3 项采用 A.P.,后 3 项采用 G.P.。首先,我们将解释算术级数(A.P.)和几何级数(G.P.)的基本定义。 算术级数(A.P.) – 它是一个数字序列,其中公差 (d) 相同或恒定,表示两个连续数字的差是恒定的。例如:1,…

    2025年12月17日
    000
  • 使用C++编写的数组旋转的逆转算法

    在给定的问题中,我们有一个数组,并且我们需要使用反转算法将数组旋转d个元素,例如 − Input : arr[] = [1, 2, 3, 4, 5, 6, 7], d = 2Output : arr[] = [3, 4, 5, 6, 7, 1, 2]Explanation : As you can …

    2025年12月17日
    000
  • 如何使用C编程中的文件计算0到100之间随机数的总和?

    在这个程序中,我们添加了 0 到 100 之间生成的随机数。 每次运行后,随机数之和的结果都是不同的,即,我们得到不同的结果每次执行。 我们用来计算 0 到 100 之间的随机数之和的逻辑是 – for(i = 0; i <=99; i++){ // Storing random …

    2025年12月17日
    000
  • 重复单位可整除性(使用C++)

    在本文中,我们将讨论找到可被 N 整除的重复单元的数量。重复单元只是 1 的重复数量,令 R(k) 为重复单元,其中 k 为 1 的长度。例如 R(4) = 1111。因此我们需要找到 R(k) 可被 N 整除的 k 的最小数量,例如 – Input : N = 13Output : k…

    2025年12月17日
    000
  • 使用C++编写的数组元素排序的排名

    在给定的问题中,我们需要对数组的所有给定元素进行排名,最小的数字具有最小的排名,最大的具有最大的排名。例如,我们还需要根据数字的频率来更改数字的排名 – Input : 20 30 10Output : 2.0 3.0 1.0Input : 10 12 15 12 10 25 12Out…

    2025年12月17日
    000
  • 使用C++找出在第L个和第R个索引之间只有设置位的数字

    在给定的问题中,我们需要找到一个数字的值,该数字在给定的范围L、R之间具有所有的设置位。例如 − Input: L = 1, R = 5Output: 62Explanation: representation of given L and R in binary form is 0..011111…

    2025年12月17日
    000
  • 使用C++编写,找到一个集合上的自反关系的数量

    在本文中,我们将解释在一个集合上找到反身关系的方法。在这个问题中,我们给出一个数字n,以及一个由n个自然数组成的集合,我们必须确定反身关系的数量。 反身关系 – 如果对于集合A中的每个’a’,(a, a)属于关系R,则称关系R是集合A上的反身关系。例如 &#821…

    2025年12月17日
    000
  • 在C编程中,将序列2、6、12、20、30的前N项求和

    要求这个级数的总和,我们首先分析这个级数。 该级数是:2,6,12,20,30… 示例 For n = 6Sum = 112On analysis, (1+1),(2+4),(3+9),(4+16)…(1+12), (2+22), (3+32), (4+42), can be divided i…

    2025年12月17日
    000
  • C程序用于检查一个数是否为素数

    素数是只能被两个数字本身和一整除的数字。一个数的因数是能整除该数的数。 前十个素数的列表是 2,3,5,7,11,13,17,23,29,31。 非质数是合数。合数是可以被两个以上的数整除的数。 如果是质数和合数,则 1 既不是质数也不是合数,因为它只能被自身整除。 如何检查一个数是否为质数或合数 …

    2025年12月17日
    000
  • 在Java中如何处理SQLException与数据库操作异常_数据库异常处理实践

    SQLException是Java中处理数据库操作异常的关键,需通过try-with-resources自动管理资源,并利用getMessage()、getSQLState()、getErrorCode()等方法获取详细错误信息,结合分类处理与日志记录提升程序健壮性与可维护性。 在Java中进行数据…

    2025年12月1日 java
    000
  • Word/Int转Real类型方法

    在pl%ignore_a_1%中,real类型广泛应用于浮点数运算。由于word或int类型无法直接参与real类型的数学计算,必须先将其转换为real格式。可通过系统提供的类型转换函数或指令实现数据类型的统一,确保运算正确进行。具体步骤如下: 1、 使用MOVE指令将WORD或INT类型的变量传输…

    2025年12月1日 软件教程
    000
  • java怎么实现数据库事务管理 保证数据一致性的事务控制方法

    使用事务管理确保数据一致性,首选Spring的@Transactional注解实现声明式事务控制,支持传播行为与隔离级别设置,分布式场景可选Seata或RocketMQ事务消息保障最终一致性。 在Java开发中,保证数据库操作的数据一致性,关键在于正确使用事务管理机制。事务确保一组数据库操作要么全部…

    2025年11月28日 java
    000
  • 一点资讯如何规划内容起号_一点资讯内容规划与起号实操全攻略

    科学规划内容是成功起号的关键。首先明确账号定位,结合平台用户画像确定目标人群并垂直输出;其次通过竞品分析提炼热门选题与内容形式,模仿爆款结构进行差异化创作;接着建立选题库,结合热点工具制定周度发布计划,保持稳定更新;同时优化标题、封面与排版,提升点击率与阅读体验;最后聚焦一点号指数五大维度,提升质量…

    2025年11月4日 自媒体
    000
  • 基于CodeSys和Raspberry Pi制作简单PLC

    jzgkchina 工控技术分享平台 1、概述 目前市场上常见的PLC品牌包括:SIEMENS、Rockwell、Schneider、Mitsubishi、Beckhoff、GE、Omron、台达等。尽管这些品牌的PLC各有特色,但它们使用的编程语言大多相似,如LD、ST、FBD、CFC、IL、GR…

    2025年11月4日 系统教程
    000
  • VC编程关闭指定窗口

    本文介绍如何使用vc编程技术,通过窗口标题自动关闭指定运行程序的方法。目标窗口的标题可从任务栏中获取,适用于需要在主程序中自动化终止其他进程的应用场景。通过匹配窗口名称,程序能够准确识别并结束对应的进程,减少人工干预,提高操作的自动化水平,尤其适合开发者在项目中集成进程控制功能。 1、 打开VC6.…

    2025年11月1日 软件教程
    000

发表回复

登录后才能评论
关注微信