首页 > 解决方案 > 给定数组中的重复元素

问题描述

有一个问题是要找到数组中元素重复的次数。例如:{12、25、43、25、43}。
输出:

12 occurs 1 time
25 occurs 2 times
43 occurs 2 times

但我得到输出:

12 occurs 1 time
25 occurs 2 times
43 occurs 2 times
25 occurs 2 times
43 occurs 2 times

编码:

#include <iostream>
#include <climits>
using namespace std;

int main(){

    int a=1000;
    int index[a];
    for(int i=0; i<a ; i++){
        index[i]=0;
    }

    int n;
    cout<<"Size of Array : ";
    cin>>n;

    int arr[n];
    for(int i=0; i<n ; i++){
        cin>>arr[i];
    }

    for(int i=0; i<n ; i++){
        if(index[arr[i]]>=0){
            index[arr[i]]+=1;
        }
    }
    int rep[n];
    for(int i=0 ; i<n ; i++){
        rep[i]=index[arr[i]];
    }
   

    cout<<  "The frequency of all elements of an array :"<<endl;


    for(int i=0 ; i<n ; i++){
        if(index[arr[i]]>0){
            cout<<arr[i]<<" occurs "<<index[arr[i]]<<"times";
        }
        cout<<endl;
    }
    return 0;
}

这是我得到的输出:

如何避免两次打印相同的元素。

标签: c++arrays

解决方案


恕我直言,astd::map将是要使用的数据结构:

#include <map>
//...
std::map<int, int> frequencies;  
//...
for (i = 0; i < ARRAY_SIZE; ++i)
{
    frequencies[arr[i]]++;
}
//...
std::map<int, int>::const_iterator iter(frequencies.begin());
for (; iter != frequencies.end(); ++iter)
{
  std::cout << iter->first << ": " << iter->second << "\n";
}

推荐阅读