查找数组唯一成员的算法

时间:2014-02-05 16:59:24

标签: c++ arrays algorithm

我需要编写一个简单的算法:

  1. 查找排序数组的唯一成员
  2. 将这些成员放入另一个数组
  3. 计算唯一成员数
  4. 以下是一个例子:

    char array1[103] = {'V', 'U', 'A', 'A', 'U', 'U', 'A', 'A', 'V', 'U', 'A', 'V', 'V', 'U', 'U'};
    char array2[10]; //Empty
    //Output should be:
    3
    V U A
    

    我需要用c ++编写它,但pseuodo代码也很棒。我可以自己编写代码我只需要了解这个算法。

2 个答案:

答案 0 :(得分:0)

  1. 创建一个空的std::unordered_set对象。集合是仅包含唯一元素的集合。
  2. 循环输入数组,将元素添加到集合中。
  3. 完成后,将集合的元素复制到输出数组中。

答案 1 :(得分:0)

以下可能会有所帮助:

#include <cassert>
#include <cstring>

#include <algorithm>
#include <iostream>

int main(int argc, char *argv[])
{
    char array1[103] = {'V', 'U', 'A', 'A', 'U', 'U', 'A', 'A', 'V', 'U', 'A', 'V', 'V', 'U', 'U'};
    char array2[10]; //Empty
    int size = strlen(array1); // get the used size of the array

    std::sort(std::begin(array1), array1 + size);
    auto it = std::unique(std::begin(array1), array1 + size);
    size = it - std::begin(array1);
    assert(size < 10);
    std::copy(std::begin(array1), it, std::begin(array2));
    std::cout << size << std::endl;
    for (int i = 0; i != size; ++i) {
        std::cout << array2[i] << " ";
    }
    // Output is:
    //3
    //A U V
    return 0;
}