我们得到了一个由任意大小的整数值组成的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