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.