我们给了一个包含整数元素的数组。目标是找到数组元素的唯一对,以使类型对(arr [i],arr [j])的索引使得i
让我们用例子来理解
输入− arr [] = {1,2,3};
输出-唯一对(arr [i],arr [j])的计数,使得i <j为− 3
说明-由于所有元素都是唯一的。对将是-
(1,2) - ( arr[0],arr[1] ) 0<1 (1,3) - ( arr[0], arr[2] ) 0<2 (2,3) - ( arr[1],arr[2] ) 1<2
输入− arr [] = {4,4,3,2};
输出-唯一对(arr [i],arr [j])的计数,使得i <j为− 4
说明-由于所有元素都是唯一的。对将是-
(4,4) - ( arr[0],arr[1] ) 0<1 (4,3) - ( arr[0], arr[2] ) 0<2 (4,2) - ( arr[0],arr[3] ) 0<3 (3,2) - ( arr[2],arr[3] ) 2<3
我们将使用两种方法。第一种使用for循环的幼稚方法。使用两个for循环开始遍历数组arr []。从i = 0到i <length-1,从j = i + 1到j <length。这样,i <j。现在添加对(arr [i],arr [j])来设置<pair <int,int >> se; 在“ se”的末尾,大小为i <j的唯一对的数量。
将整数数组arr []与整数元素和长度作为大小
函数unique_pair(int arr [],int size)接受数组及其长度,并返回唯一对的数量,使得成对(arr [i],arr [j])中的索引i <j
将count的初始值设为0。
取一个包含整数对的“ se”集。(set <pair <int,int >> se)
使用两个for循环开始遍历arr []。从i = 0到i <size-1,从j = i + 1到j <size。
对于每对总是i <j,使用se.insert(make_pair(arr [i],arr [j]))将对(arr [i],arr [j])添加到'se'。
在两个for循环的末尾,更新count = se.size()。
Count现在在“ se”中有许多对。(所有都是唯一的)。
返回计数作为结果。
通过这种方法,我们将在每个元素之后找到唯一的元素。arr [i]将与从arr [i + 1到size-1]的不同/唯一元素配对。因此,如果在arr [i]之后有x个唯一元素,则arr [i]将构成x对。因此,我们将首先创建一个在索引i之后标记唯一元素的数组。然后,将这样的计数相加,得出总的唯一对。
将整数数组arr []与整数元素和长度作为大小
函数unique_pair(int arr [],int size)接受数组及其长度,并返回唯一对的数量,使得成对(arr [i],arr [j])中的索引i <j
将count的初始值设为0。
取temp变量并将其设置为0。
取长度为arr_2 []的数组并初始化arr_2 [size-1] = 0,因为最后一个元素后面有0个唯一元素。
创建两个整数集,选中和取消选中。
从最后一个元素到first.i = size-1到i> = 0遍历数组。在设置检查中搜索arr [i]。
如果找不到,那么它是唯一的。递增温度(temp是arr [i]之后的唯一元素的计数)。设置arr_2 [i] = temp。
否则arr_2 [i] = temp。温度没有增加。
插入arr [i]以设置检查。现在将不考虑下一次出现的arr [i]。
在此for循环结束之后。arr_2 []已更新。
现在从索引i = 0遍历arr []到i <size-1。对于每个arr [i],请检查是否已设置为uncheck。如果不是,则第一次出现arr [i],添加arr_2 [i](在arr [i]之后的唯一元素)进行计数。否则,什么也不做,继续。
添加arr [i]设置为取消选中。现在将不再考虑下一次出现arr [i]。
最后,计数具有唯一对,因此对于唯一对(arr [i],arr [j]),i <j。
返回计数作为结果。
#include<bits/stdc++.h>
using namespace std;
int unique_pair(int arr[], int size){
int count = 0;
set<pair<int, int>> se;
for(int i = 0; i < (size - 1); i++){
for (int j = i + 1; j < size; j++){
se.insert(make_pair(arr[i], arr[j]));
}
}
count = se.size();
return count;
}
int main(){
int arr[] = { 4, 3, 1, 6, 7 };
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"Count of unique pairs (arr[i], arr[j]) such that i < j are: "<<unique_pair(arr, size);
return 0;
}输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of unique pairs (arr[i], arr[j]) such that i & j are: 10
#include<bits/stdc++.h>
using namespace std;
int unique_pair(int arr[], int size){
int count = 0, temp = 0;
int arr_2[size];
arr_2[size-1] = 0;
set<int> check, uncheck;
for (int i = size - 1; i > 0; i--){
auto set = check.find(arr[i]);
if (set != check.end()){
arr_2[i - 1] = temp;
}
else{
arr_2[i - 1] = ++temp;
}
check.insert(arr[i]);
}
for (int i = 0; i < size - 1; i++){
auto set = uncheck.find(arr[i]);
if (set != uncheck.end()){
continue;
}
count += arr_2[i];
uncheck.insert(arr[i]);
}
return count;
}
int main(){
int arr[] = { 4, 3, 1, 6, 7 };
int size = sizeof(arr)/sizeof(arr[0]);
cout<<"Count of unique pairs (arr[i], arr[j]) such that i < j are: "<<unique_pair(arr, size);
return 0;
}输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of unique pairs (arr[i], arr[j]) such that i < j are: 10