在Vector中查找元素对
Find pairs of elements in Vector
我有以下向量。V = {1,2,3,4}
我想找到所有成对的元素。总共我会有K(K-1)/2对元素。
对={1,2},{1,3},{1,4},{2,3},{2,4},{3,4}。
Formula: K(K-1)/2 = 4(4-1)/2 = 6 pairs
这个算法的伪代码应该是什么。
谢谢你的帮助。我写了代码,它可能会对未来的某个人有所帮助:
伪代码:dasblinkenlight
for i in [0..N)
pair.first = data[i] // Set the first element
for j in (i..N)
pair.second = data[j] // Set the second element
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
typedef pair<int,int> pairs;
pairs p;
vector<pairs> pVec;
for(size_t i = 0; i < v.size();i++)
{
p.first = v[i]; // Set the first element
for(size_t j = i+1; j < v.size();j++)
{
p.second = v[j];// Set the second element
pVec.push_back(p); // Add p to vector
}
}
// Print pairs
for(size_t i = 0; i < pVec.size();i++)
{
cout <<"{"<< pVec[i].first <<" "<<pVec[i].second <<"}" <<", ";
}
return 0;
}
以下是关于如何做到这一点的一般想法:
- 有两个候选
N
作为对中的第一个成员 - 当成员
k
被选择为该对的第一个成员时,有N-k
候选作为该对的第二个成员 - 您可以使用两个嵌套循环生成所有对
- 用级数和步数为
1
的公式,可以证明对的总数是N*(N-1)/2
以下是如何使用两个循环:
for i in [0..N)
pair.first = data[i] // Set the first element
for j in (i..N)
pair.second = data[j] // Set the second element
注意:上面的代码使用数学符号表示区间,其中方括号表示区间中包含相应的结束,圆括号表示排除相应的结束。
相关文章:
- 使用堆查找第K个最大元素的时间复杂性
- 查找矩阵C++中每一列和每一行的最小和最大元素
- C++如何在向量中查找最常见的元素
- 查找两个排序向量中共有的元素
- 在对向量中查找元素的索引
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 查找矩阵中单元格的相邻元素
- 为什么使用数组元素查找最大数字的程序不起作用?
- 查找第一个数组中不存在的元素
- 查找最小的下一个更大的元素
- 在最小堆中查找最大元素
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- set::find 查找不存在的元素
- 在集合中查找使用结构C++的元素
- 从斐波那契序列 c++ 中的数组中查找正确的元素时出错
- 用于查找数组中最大元素的出现次数的代码,给出分段错误
- 查找数组中指示性较大但数组中值较小的元素
- C++结构集无法按元素查找/擦除
- 如何在OpenCV中使用Matlab的512元素查找表数组?
- 使用数组的元素查找总和'k'