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


给定一个包含 N 个元素的数组。目标是找到索引对 (i,j),它们具有相同的元素值,且 i!=j。即,Arr[i]=Arr[j] 且 i!=j。这用于配对相同尺寸的手套。在 N 副手套中,只有配对的手套才能出售。

我们将通过运行两个循环来做到这一点,其中 0<=i<n-1 和 i<j<n。比较每一对 (i,j) 是否 Arr[i]==Arr[j] && Arr[i]>0 && Arr[j]>0,以及 i!=j。如果为真,则增加此类对的计数,并将这些元素设为 -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,以将其从进一步的比较中移除。

  • 在所有循环结束时,count 将包含手套对的总数。

  • 将 count 作为结果返回。

示例

 现场演示

// C++ implementation of above approach
#include <bits/stdc++.h>
using namespace std;
// Function to count equal elements to make pair of gloves
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.

更新于: 2020-08-29

387 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告