向量中的重复元素

加吉克·阿拉维迪安(Gagik Alaverdyan)

我是C ++学生。我需要解决这个问题:“写一个程序,接收一个数字和一个给定数字大小的数组。该程序必须找到给定数字的所有重复项,并将它们推回重复元素的向量中,并打印矢量”。要求是我只允许使用向量库,并且数组的每个重复元素都只能被压入向量一次,例如,我的数组是“ 1、2、1、2、3、4 ...”,向量必须为“ 1,2”。到目前为止,这是我所做的。我的代码可以运行,但是我无法使其相同的重复项仅添加到重复元素的向量中。

#include <iostream>
#include <vector>

int main() {
  int n;
  std::cin >> n;
  int* arr = new int[n];
  std::vector<int> repeatedElements;
  for(int i = 0; i < n; ++i) {
    std::cin >> arr[i];
  }
  for(int i = 0; i < n; ++i) {
    bool foundInRepeated = false;
    for(int j = 0; j < repeatedElements.size(); ++j) {
      if(arr[i] == repeatedElements[j]) {
        foundInRepeated = true;
        break;
      }
    }
    if(foundInRepeated) {
      continue;
    } else {
      for(int i = 0; i < n; ++i) {
        int count = 1;
        for(int j = i + 1; j < n; ++j) {
          if(arr[i] == arr[j]) {
            ++count;
          }
        }
        if(count > 1) {
          repeatedElements.push_back(arr[i]);
        }
      }
    }
  }
  for(int i = 0; i < repeatedElements.size(); ++i) {
    std::cout << repeatedElements[i] << " ";
  }
  std::cout << std::endl;
}
慈济

考虑一下您在这里做什么:

if(foundInRepeated) {
      continue;
    } else {
      for(int i = 0; i < n; ++i) {  // why?

如果在中i找不到某个索引处的元素(来自外部循环)repeatedElements,您将再次遍历整个数组,并添加重复的元素。但是您已经有一个i感兴趣的,并且还没有添加到中repeatedElements您只需要jelse分支中进行遍历

删除标记的行why?(和右括号)将解决问题。这是一个演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章