给我们一个整数数组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