计算给定总和的对

Count pairs with given sum

本文关键字:和的 计算      更新时间:2023-10-16

给定一个整数数组和一个数字"sum",找到数组中总和等于"sum"的整数对的数量。这是Geeks for Geeks的解决方案:

// C++ implementation of simple method to find count of 
// pairs with given sum. 
#include <bits/stdc++.h> 
using namespace std; 
// Returns number of pairs in arr[0..n-1] with sum equal 
// to 'sum' 
int getPairsCount(int arr[], int n, int sum) 
{ 
unordered_map<int, int> m; 
// Store counts of all elements in map m 
for (int i=0; i<n; i++) 
m[arr[i]]++; 
int twice_count = 0; 
// iterate through each element and increment the 
// count (Notice that every pair is counted twice) 
for (int i=0; i<n; i++) 
{ 
twice_count += m[sum-arr[i]]; 
// if (arr[i], arr[i]) pair satisfies the condition, 
// then we need to ensure that the count is 
// decreased by one such that the (arr[i], arr[i]) 
// pair is not considered 
if (sum-arr[i] == arr[i]) 
twice_count--; 
} 
// return the half of twice_count 
return twice_count/2; 
} 
// Driver function to test the above function 
int main() 
{ 
int arr[] = {1, 5, 7, -1, 5} ; 
int n = sizeof(arr)/sizeof(arr[0]); 
int sum = 6; 
cout << "Count of pairs is " 
<< getPairsCount(arr, n, sum); 
return 0; 
} 

我最大的问题是,什么是总和?它没有声明,因此必须以C++构建。但是,我找不到它的任何文档,也不确定它是如何工作的。 我正在尝试遵循代码,并且 sum-arr 值没有意义。

到达 [1,5,8,-1,5]

m [0,1,0,0,0]

总和 [5,1,-2,7,1]

表达式

sum - arr[n]产生存储在数组第 n 个位置的值。

在这里,在 n 处的 arr 值(这里在i点的位置,因为它是arr[i](减去sum的值。

鉴于,你说,

int arr[] = { 1, 5 , 8, -1, 5 }

int sum = 6

然后,例如,将i作为0...

arr[i]表示为arr[0],这意味着指向数组中的第一个元素 (0arr。此处,值为 1。

从 1 中减去6,我们得到5

另一方面,sum - arr是用指针(int arr[]在程序内变得int * arr(的整数(int(的减法,这实际上是不可能的,因为超级指针比子指针大......

但是,您可以sum - *arr(这称为取消引用(。

遗言,

只是为了减少使用指针和所有内容的所有这些混淆,只需使用std::vector<type>(示例:std::vector<int> arr;(,这是C++中的常见做法,更重要的是,它们的工作方式也很好!(不过,您仍然坚持在 C 中使用指针!

祝你好运!

我最大的问题是,什么是 sum-arr?

sum是一个 id 表达式。它命名一个类型为int的变量。

arr是一个 id 表达式。它命名一个不同的变量,该变量的类型为int*。它也是表达式arr[i]的子表达式。该表达式是下标运算符,在本例中,它将指针arr递增到数组中i连续同级,并间接指针。

-是减法运算符。sum表达式是左操作数,arr[i]是右操作数。