使用C++编写一个程序来找到具有给定范围内和的子数组的数量
在本文中,我们将使用 C++ 程序求解总和在给定范围内的子数组的数量。我们有一个正整数数组 arr[] 和一个范围 {L, R},我们必须计算总和在给定范围 L 到 R 内的子数组的总数。所以这是该问题的简单示例 -
Input : arr[] = {1, 4, 6}, L = 3, R = 8 Output : 3 The subarrays are {1, 4}, {4}, {6}. Input : arr[] = {2, 3, 5, 8}, L = 4, R = 13 Output : 6 The subarrays are {2, 3}, {2, 3, 5}, {3, 5}, {5}, {5, 8}, {8}.
寻找解决方案的方法
我们将解释使用 C++ 问题解决此问题的两种方法 -
暴力方法
最基本的暴力方法方法用于计算每个子数组的总和,然后查找该总和是否存在于给定范围内。 (但是这种方法会花费我们很多时间,因为它的时间复杂度是 O(n*n),其中 n 是数组的大小)。
高效的方法
节省现在,有效的方法是使用滑动窗口技术,使用这种技术,我们将在 O(n) 内更快或更有效地计算结果。
示例
#include <bits/stdc++.h> 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 <= end && sum >= 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++编写一个程序来找到具有给定范围内和的子数组的数量的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

在本文中,我们将了解逆转算法,将给定的数组向右旋转k个元素,例如−Input:arr[]={4,6,2,6,43,7,3,7},k=4Output:{43,7,3,7,4,6,2,6}Explanation:Rotatingeachelementofarrayby4-elementtotherightgives{43,7,3,7,4,6,2,6}.Input:arr[]={8,5,8,2,1,4,9,3},k=3Output:{4,9,3,8,5,8,2,1}寻找解决方案的方

圆是封闭图形。圆上的所有点到圆内一点的距离都相等。中心点称为圆心。点到圆心的距离称为半径。面积是封闭图形尺寸跨度的定量表示。圆的面积是圆的尺寸内包围的面积。计算圆面积的公式,Area=π*r*r为了计算面积,我们给出了圆的半径作为输入,我们将使用公式来计算面积,算法STEP1:Takeradiusasinputfromtheuserusingstdinput.STEP2:Calculatetheareaofcircleusing, area=(

我们有两个整数数组,一个具有计算的元素,另一个具有分割数组以生成子集所需的分割点,我们必须计算每个分割中每个子集的总和并返回最大子集让我们通过示例来理解:-输入−intarr[]=intarr[]={9,4,5,6,7}intsplitPoints[]={0,2,3,1};输出−每次分割后的最大子数组和[22,13,9,9]解释−这里我们根据数组的分割点来分解数组,并在每次分割后获得最大子集和第一次分割后→{9}和{4,5,6,7}>>最大子数组总和为-22第二次分割后→{9},{4

我们需要适当的知识才能在C++的数组语法中创建几个唯一的对。在查找唯一对的数量时,我们计算给定数组中的所有唯一对,即可以形成所有可能的对,其中每个对应该是唯一的。例如-Input:array[]={5,5,9}Output:4Explanation:Thenumberofalluniquepairsare(5,5),(5,9),(9,5)and(9,9).Input:array[]={5,4,3,2,2}Output:16寻找解决方案的方法有两种方法可以解决这个问题,它们是−

在本文中,我们将使用C++解决寻找最大值和最小值相同的子数组数量的问题。以下是该问题的示例−Input:array={2,3,6,6,2,4,4,4}Output:12Explanation:{2},{3},{6},{6},{2},{4},{4},{4},{6,6},{4,4},{4,4}and{4,4,4}arethesubarrayswhichcanbeformedwithmaximumandminimumelementsame.Input:array={3,3,1,5,

在本文中,我们将解释在一个集合上找到反身关系的方法。在这个问题中,我们给出一个数字n,以及一个由n个自然数组成的集合,我们必须确定反身关系的数量。反身关系-如果对于集合A中的每个'a',(a,a)属于关系R,则称关系R是集合A上的反身关系。例如-Input:x=1Output:1Explanation:set={1},reflexiverelationsonA*A:{{1}}Input:x=2Output:4Explanation:set={1,2},reflexiverelationsonA*

在这个问题中,我们得到一个指向链表头部的指针和一个整数k。在大小为k的组中,我们需要反转链表。例如-Input:1<->2<->3<->4<->5(doublylinkedlist),k=3Output:3<->2<->1<->5<->4寻找解决方案的方法在这个问题中,我们将制定一个递归算法来解决这个问题。在这种方法中,我们将使用递归并使用递归来解决问题。示例#include<iostream&
