计算在C ++中元素小于或等于X的子数组

给我们一个包含整数和变量X的数组arr []。目标是对arr []的所有子数组进行计数,以使每个子数组仅包含小于或等于X的元素。例如,如果array为[1, 2,3]和X = 2,那么子数组将是[1],[2]和[1,2]

让我们通过示例来理解。

输入− arr [] = {4,3,2,1,6}; X = 3

输出-元素小于或等于X的子数组的计数为-6

说明-Subaarays将是-

[3], [2], [1], [3,2], [2,1], [3,2,1]

输入− arr [] = {3,6,2,7,1,8,5}; X = 5

输出-元素小于或等于X的子数组的计数为-4

说明-Subaarays将是-

[3], [2], [1], [5]

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

我们正在创建一个与原始数组arr []大小相同的二进制数组temp_arr []。如果对应的arr [i]小于或等于X,则此二进制数组将为1,否则为0。现在遍历temp_arr []并检查连续的1(在arr []中小于X的元素)。将每个此类子数组的长度存储在temp中。对于长度为temp的数组。子数组总数为temp *(temp + 1)/ 2。将其添加到总数中,并继续到temp_arr []的末尾。

  • 取数组arr []和变量X。

  • 函数sub_X(int arr [],int size,int x)接收数组和x并返回仅包含小于或等于x的元素的子数组的计数。

  • 将临时变量temp和此类子数组的最终总数作为count。

  • 取一个长度与arr []相同的二进制数组temp_arr []。

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

  • 对于每个元素arr [i] <= x,设置temp_arr [i] = 1否则为0。

  • 使用for循环遍历temp_arr []。

  • 如果任何元素temp_arr [i] ==1。则使用子循环从当前索引i遍历,直到temp_arr [temp_2](temp_2 = i + 1; temp_2 <size)为1。如果为0,则中断子循环。

  • 全为1的子数组的计数为temp = temp_2-i。

  • 该子数组全为1,表示arr [i]中的所有元素均<= x。子数组总数将为temp_3 = temp *(temp + 1)/ 2。

  • 在两次遍历结束时,计数将包含arr内所有小于或等于x的子数组的计数总数。

示例

#include <iostream>
using namespace std;
int sub_X(int arr[], int size, int x){
   int count = 0, temp = 0;
   int temp_arr[size];
   for (int i = 0; i < size; i++){
      if (arr[i] <= x){
         temp_arr[i] = 1;
      }
      else{
         temp_arr[i] = 0;
      }
   }
   for (int i = 0; i < size; i++){
      if (temp_arr[i] == 1){
         int temp_2;
         for(temp_2 = i + 1; temp_2 < size; temp_2++){
            if(temp_arr[temp_2] != 1){
               break;
            }
         }
         temp = temp_2 - i;
         int temp_3 = (temp) * (temp + 1)/2;
         count = count + temp_3;
         i = temp_2;
      }
   }
   return count;
}
int main(){
   int arr[] = { 2, 6, 1, 10, 5, 3 };
   int x = 4;
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of sub-arrays which have elements less than or equal to X are: "<<sub_X(arr, size, x);
   return 0;
}

输出结果

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

Count of sub-arrays which have elements less than or equal to X are: 3