在2d向量中找到唯一对的最快方法

时间:2017-03-06 02:30:29

标签: arrays algorithm search find unique

我正在寻找一种有效且快速的算法来查找二维矢量中的唯一对。 例如: vec = [[1 5] [2 2] [1 5] [3 1] [6 3] [2 2]] 我想生成下面只有唯一对的2d向量。 vec = [[1 5] [2 2] [3 1] [6 3]]

非常感谢使用伪代码(或任何类似C语法)的演示。

非常感谢

4 个答案:

答案 0 :(得分:0)

我认为这个问题可以在O(n)中解决,最好的是O(n),最差的是o(2n)

答案 1 :(得分:0)

我不知道你在寻找多快的算法,但是NlogN + N算法的想法

//create an extra vector, we call it sol
vec = [[1 5], [2 2], [1 5], [3 1], [6 3], [2 2]]
sort(vec)    
i = 0
while i < vec.length()
    sol.push_back(i)
    i = i + 1
    while i < vec.length() and vec[i] == vec[i-1]
        i = i + 1

sol是你想要的矢量

答案 2 :(得分:0)

你刚才去了:

set([(1,2), (2,3),(1,2)]

在C ++中,您可以使用unordered sethttp://www.cplusplus.com/reference/unordered_set/unordered_set/

使用pair<int,int>作为积分

答案 3 :(得分:0)

这是一个O(n log n)时间到位的解决方案。

sort(vec.begin(), vec.end());
auto new_size = unique(vec.begin(), vec.end()) - vec.begin();
vec.resize(new_size);