计算给定总和的对
Count pairs with given sum
给定一个整数数组和一个数字"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]
是右操作数。
- 我可以通过取每个数字的模并取和来计算大数的模数吗?
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 计算校验和的逐位运算符
- std::d eclval 和未计算的表达式
- 使用异步/期货并行和并发计算向量的范数
- C++:cout 和函数调用之间的计算顺序
- 根据单个持续时间和比率计算两个持续时间的正确方法
- C++运算符和带枚举的计算结果为 false
- 努力理解一个以十六进制、十进制、bin 和 dec 计算数字总和的程序
- 使用指针和结构C 计算两个点之间的距离,分割故障问题
- 在OpenCV中使用遮罩和ROI计算轮廓内浮器的图像像素值(例如平均值)
- 使用参数和此关键字时的计算顺序
- 对于给定的n个数字序列,找到具有最大总和和尽可能低的计算复杂度的子串
- 为什么用Eigen和OpenCV计算的SVD左奇异向量具有不同的符号
- 如何计算具有相同SHA-160和的另一位模式
- 对根据时间和分钟计算通话成本的简单家庭作业程序感到沮丧
- 使用结构和函数计算线的长度
- 什么是使应用程序具有CPU和GPU计算后端的最佳方法
- struct和time_t的计算错误