C ++中数组中具有相等元素的索引对的计数

给我们一个由N个元素组成的数组。目的是找到具有相同元素值的索引对(i,j),使得i!= jie,Arr [i] = Arr [j]和i!= j。这用于制作大小相同的手套。在N手套中,只有成对的手套才有用。

我们将通过运行两个循环,其中0 <= i <n-1和i <j <n来做到这一点。如果Arr [i] == Arr [j] && Arr [i]> 0 && Arr [j]> 0,并且i!= j,则对每对(i,j)进行比较。如果为true,则增加此类对的计数,并将这些元素设置为-1(Arr [i] = Arr [j] = -1),以将其从进一步检查中移除,因为没有手套可以具有-1号。

让我们通过示例来理解。

输入− Arr [] = {4,3,2,1,2,4} N = 6

输出-具有相等元素的索引对的计数-2

说明-

count=0, Arr[]= [ 4,3,2,1,2,4 ]
Arr[0]=Arr[5], 0!=5, count=1 Arr[0]=Arr[5]=-1 → [ -1,3,2,1,2,-1 ]
Arr[2]=Arr[4], 2!=4, count=2 Arr[2]=Arr[4]=-1 → [ -1,3,-1,1,-1,-1 ]
Now array has no new pairs with equal values, i!=j and > -1. Total pairs=2

输入− Arr [] = {2,2,2,2,2} N = 5

输出-具有相等元素的索引对的计数-2

说明-

count=0, Arr[]= [ 2,2,2,2,2 ]
Arr[0]=Arr[1], 0!=1, count=1 Arr[0]=Arr[1]=-1 → [ -1,-1,2,2,2 ]
Arr[2]=Arr[3], 2!=3, count=2 Arr[2]=Arr[3]=-1 → [ -1,-1,-1,-1,2 ]
Now array has no new pairs with equal values, i!=j and > -1. Total pairs=2

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

  • 我们将一个整数数组Arr []初始化为随机数,以确保手套的大小> 0。

  • 取一个变量n,它存储Arr []的长度。

  • 函数countPairs(int arr [],int n)接受一个数组,将其长度作为输入并返回大小相等且索引不同的对。

  • 对数组中的每个元素使用两个for循环遍历数组。

  • 外循环从0 <= i <n-1,内循环i <j <n

  • 检查arr [i]和arr [j]是否为正。如果arr [i] == arr [j],则递增计数。(根据循环中设置的条件,i永远不会等于j,无需进行比较)。

  • 现在设置arr [i] = arr [j] =-1,以将其从进一步的比较中删除。

  • 在所有循环的末尾,计数将具有手套的总数。

  • 返回计数结果。

示例

// C++ implementation of above approach
#include <bits/stdc++.h>
using namespace std;
//计数相等元素以制作手套的功能
int countPairs(int arr[], int n){
   int count = 0;
   for(int i=0;i<n-1;i++){
      for(int j=i+1;j<n;j++){
         if(arr[i]==arr[j] && arr[i]>0 && arr[j]>0){
            count++;
            arr[i]=arr[j]=-1;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 1,2,4,2,1,2,4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout <<"Pair of gloves ( Equal element pairs ):"<<countPairs(arr, n);
   return 0;
}

输出结果

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

Pair of gloves ( Equal element pairs ):3.