在数组中查找重复的元素

时间:2019-06-24 07:12:57

标签: c++ arrays function

我自己想出了这个问题。我只是一个初学者,目前正在学习C ++。
问:查找数组中所有重复的元素并提供其索引号。

我正在尝试使用for循环解决此问题。

#include <iostream>

using namespace std;
void arfn(int var1[],int length){
    int x,y;
    int store[length];
    for(x=0;x<length;x++){
        store[x]=var1[x];}

    for(int counter=0;counter<length;counter++)
    {
        cout<<store[counter]<<endl;
        for(x=0;x<length;x++) {
           for (y=0;y!=x && y<length;y++)
            /*By these loops i expect to find index number of repeated elements, 
                eliminating the case of program showing the same index numbers*/
            {   
                if(store[x]=store[y]) {
                    cout<<store[x]<<" "<<x<<" "<<y<<" "<<endl;
                } 
            }
        }            
    }

}
int main()
{
    int numbers[]={22,33,44,55,55};
    int length=5;
    arfn(numbers,length);

    return 0;
}

我希望找到的输出为
55 3 4
但是输出的确是巨大的,并且远远不能达到期望的输出。

2 个答案:

答案 0 :(得分:0)

您可以找到有关此算法问题的许多文章 这是一个: Solving Algorithmic Problems: Find a Duplicate in an Array

您应该提出一些问题来应对这一挑战

  1. 预期的输入大小是多少?
  2. 所需的复杂度是多少?
  3. 我可以使用更多的内存来优化复杂性吗?
  4. 我的输入是否排序?

然后,您可以从天真的实现开始,然后尝试计算 如何优化

例如: 我的代码的哪些部分可以运行多次

关于使用C ++的方法,请尝试查找C ++的详细信息, 使用std :: vector或std :: array而不是C样式数组 寻找可以解决您某些问题的STL算法

答案 1 :(得分:0)

如果您愿意让C ++成为您的强大工具,我可能建议您先熟悉STL。

以下程序通过将矢量转换为地图来完成此工作,该地图负责处理索引。

#include <iostream>
#include <vector>
#include <iterator>
#include <map>

void printDuplicates(const std::vector<int>& arr)
{
    std::map<int, std::vector<int>> map;
    for (auto iter=arr.begin(); iter!=arr.end(); iter++)
    {
        auto index = std::distance(arr.begin(), iter);
            map[*iter].push_back(index);
    }
    for (auto& iter : map)
    {
        if (map[iter.first].size()>1)
        {       

            std::cout << iter.first << " ";
            for (auto iterIndices : map[iter.first])
            {
                std::cout << iterIndices << " ";
            }
            std::cout << std::endl;
        }
    }
}

int main() {
    std::vector<int> arr{ 1,2,5,7,2,8,4,7 };
    printDuplicates(arr);

}