在C ++中计算所有元素都大于K的子数组

给我们一个整数数组arr []。也是一个数字K。目标是对arr []的所有子数组进行计数,以使子数组的所有元素都大于K或K小于子数组的所有元素。如果数组为[1,2,3],K为1。子数组将为[2],[3],[2,3]。

让我们通过示例来理解。

输入− arr [] = {2,2,1,1,1,5}; K = 1

输出-所有元素都大于K的子数组的计数为-4

说明-Subaarays将是:[2],[2],[5],[2,2]。每个子数组中的所有元素都大于1。

输入− arr [] = {3,4,5,6}; K = 2

输出-所有元素都大于K的子数组的计数为-10

说明-Subaarays将是-[3],[4],[5],[6],[3,4],[4,5],[5,6],[3,4,5],[4 ,5,6],[3,4,5,6]。总数= 10。

以下程序中使用的方法如下

我们将使用for循环遍历数组。如果当前元素大于K。增加计数。否则,设置count = 0和total = count *(count + 1)/ 2。(用于子数组)。如果最后计数为非零。将count *(count + 1)/ 2添加为剩余子数组的数量。

  • 取数字的数组arr []。

  • 函数sub_greater_k(int arr [],int size,int k)获取数组,并返回所有元素大于k的子数组的计数。

  • 将初始计数设为0。

  • 我们将使用从i = 0到i <size的for循环遍历数组。

  • 如果arr [i]> k,则增加计数。

  • 具有count(元素> k)的子数组将为count *(count + 1)/ 2。将其添加到所有此类子数组的总数中。

  • 如果计数不为零,则再次在总数末添加count *(count + 1)/ 2。

  • 返回总计作为结果。

示例

#include <bits/stdc++.h>

using namespace std;

int sub_greater_k(int arr[], int size, int k){

   int count = 0;

   int total = 0;

   for (int i = 0; i < size; i++){

      if (arr[i] > k){

         count++;

      }

      else{

         total += (count) * (count + 1) / 2;

         count = 0;

      }

   }

   if(count){

      total += (count) * (count + 1) / 2;

   }

   return total;

}

int main(){

   int arr[] = {2, 4, 6, 1, 3, 7, 9 };

   int size = sizeof(arr) / sizeof(arr[0]);

   int k = 7;

   cout<<"Count of subarrays with all elements greater than K are: "<<sub_greater_k(arr, size, k);

   return 0;

}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Count of subarrays with all elements greater than K are: 1

以上是 在C ++中计算所有元素都大于K的子数组 的全部内容, 来源链接: utcz.com/z/338018.html

回到顶部