我们得到了一个由任意大小的整数值组成的arr []数组,任务是计算给定数组中总和也存在于同一数组中的不同对的数量。
数组是一种数据结构,可以存储相同类型的元素的固定大小的顺序集合。数组用于存储数据集合,但是将数组视为相同类型的变量集合通常会更有用。
不论顺序如何,对具有相同元素的一对都会被计数一次。例如,(3,2)和(2,3)将计为1。
如果一个数组中多次出现一个数字,那么它将被精确地视为两次以形成一对。例如,如果一个数组的元素为{2,2,2,2},那么该对将为(2,2)并将其计为1。
Input − int arr = {6, 4, 10, 14}Output − count is 2解释-数组中总和为(6,4)和(10,4)的对,因此count为2
Input − int arr = {6, 6, 6 ,6, 6, 13}Output − count is 0解释-数组中没有对,而同一数组中的和是对。因此,计数为0。
比如说创建一个数组arr []
使用length()函数将根据数组中的元素返回整数值来计算数组的长度。
取一个临时变量来存储元素的数量。
创建一个映射类型变量,假设为mp
i的开始循环为0,且我小于数组的大小
创建另一个对类型变量的映射,比如说par
i的开始循环为0,且我小于数组的大小
在循环内部,用j到i + 1且j小于数组的大小开始另一个循环
在循环内部,检查mp [arr [i] + arr [j]]> 0和pr [{arr [i],arr [j]}] = = 0,然后将计数增加1
将par [{arr [i],arr [j]}]递增1
将par [{arr [j],arr [i]}]递增1
返回计数
打印结果。
#include <iostream>
#include <map>
using namespace std;
//返回ar [0..n-1]中的对数
//总和等于“总和”
int countpairs(int ar[], int n){
//将所有元素的计数存储在映射m-
//查找对(ar [i],sum-ar [i])
//因为(ar [i])+(sum-ar [i])=和
map<int, int> mymap;
for (int i = 0; i < n; i++){
mymap[ar[i]]++;
}
//要删除重复项,我们使用结果图
map<pair<int, int>, int> p;
int result = 0;
//考虑所有对
for (int i = 0; i < n; i++){
for (int j = i + 1; j < n; j++){
//如果当前对的总和存在
if (mymap[ar[i] + ar[j]] > 0 && p[{ ar[i], ar[j] }] ==0){
result++;
}
//双向插入当前对避免
//重复。
p[{ ar[i], ar[j] }]++;
p[{ ar[j], ar[i] }]++;
}
}
return result;
}
//主要功能
int main(){
int ar[] = { 6, 4, 10, 14 };
int n = sizeof(ar) / sizeof(ar[0]);
cout << "count is "<<countpairs(ar, n);
return 0;
}输出结果
如果运行上面的代码,我们将获得以下输出-
count is 2