计算C ++中具有相同偶数和奇数元素的子数组

给我们一个正整数数组。目的是找到数组中数字的子数组,以使每个子数组中具有相同数量的偶数和奇数元素。如果数组是{1,2,3,4}。然后,子数组将是{1,2},{2,3},{3,4},{1,2,3,4}。此类子数组的数量为4。

让我们用例子来理解

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

输出-具有相同偶数和奇数元素的子数组的计数为-4

说明-子数组将为-{7,8},{8,3} {3,2},{7,8,3,2}

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

输出-具有相同偶数和奇数元素的子数组的计数为-0

说明-所有元素都是偶数。

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

在这种方法中,我们将使用变量temp作为数组元素之间的差(最初为0),如果arr [i]为奇数,则将其递增1;如果arr [i]为偶数,则将其递减1。当temp的值自身重复时,则必须存在一个在这些索引之间具有相同数量的偶数-奇数的子数组。温度可以为正也可以为负。取两个哈希数组arr_1 [size + 1]表示正差的频率,将arr_2 [size + 1]表示负差的频率。

对于每个温度temp <0,从arr_1 [-temp]添加频率进行计数。[-(-temp)]给出正指数。

对于每个temp> 0的差异,从arr_2 [temp]添加频率进行计数。因为所有出现的相同差值将成为子数组的一部分。将这些频率更新1。

Arr[] = { 1,3,5,7,8,3,2 }

温度值从0开始-

1,2,3,4,3,4,3
arr_1[] { 1,1,1,3,2,0,0,0 } //所有差异都是积极的
arr_2[] { 0,0,0,0,0,0,0,0 } //无差异为负
Adding arr_1[temp] to count in each iteration gives count=4.

子数组为-{7,8},{8,3} {3,2},{7,8,3,2}

  • 将初始数组作为arr []。

  • 函数Sub_even_odd(int arr [],int size)获取数组及其长度,并返回具有相同偶数和奇数元素的子数组的计数。

  • 将初始计数设为0,将变量temp作为变量,当遇到奇数时将增加,而当遇到偶数时将减少。

  • 取两个数组arr_1 []和arr_2 []来存储温度的频率。arr_1 []表示temp的正值,如果整个数组是偶数,则最大为size + 1。

    arr_2 []用于temp的负值,如果整个数组是偶数,则最大为size + 1。

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

  • 如果arr [i]&1 == 1,则意味着arr [i]为奇数。增量温度 否则递减温度。

  • 如果temp <0,则从arr_2 []中添加相应的频率进行计数。将该频率增加1。

  • 如果temp> 0,则从arr_1 []中添加相应的频率进行计数。将该频率增加1。

  • 最后,我们将arr []中具有相同偶数和奇数元素的子数组的数量计为

  • 返回计数作为结果。

示例

#include <bits/stdc++.h>
using namespace std;
int Sub_even_odd(int arr[], int size){
   int count = 0;
   int temp = 0;
   int arr_1[size + 1] = {0};
   int arr_2[size + 1] = {0};
   arr_1[0] = 1;
   for (int i = 0; i < size; i++){
      if(arr[i] & 1 == 1)
         { temp++; }
      else
         { temp--; }
      if (temp < 0){
         count += arr_2[-temp];
         arr_2[-temp]++;
      }
      else{
         count += arr_1[temp];
         arr_1[temp]++;
      }
   }
   return count;
}
int main(){
   int arr[] = {3, 4, 6, 1, 2, 4, 10, 42};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of subarrays with same even and odd elements are: "<<Sub_even_odd(arr,
size);
   return 0;
}

输出结果

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

Count of subarrays with same even and odd elements are: 4