c++ - 给定数组中的重复元素
问题描述
有一个问题是要找到数组中元素重复的次数。例如:{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;
}
这是我得到的输出:
如何避免两次打印相同的元素。
解决方案
恕我直言,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";
}
推荐阅读
- javascript - 使用控制器中的字符串 [] 数组值设置 Javascript var
- typescript-typings - 在需要函数的地方,打字稿允许我传递具有不兼容的“应用”属性的对象
- excel - 使用 vb.net 在 excel 中更改一些具有激活过滤器方法的单元格值
- c - 使用 recv() 接收 uint32 网络字节顺序号有时有效,而其他无效(使用相同的命令)
- python-3.x - 如何在 Travis CI 上构建 Python 3.8?
- amazon-ec2 - 哪个 URL 用于 ELB 后面的 EC2 实例上的 Websocket 服务器
- javascript - 是否需要在类构造函数中声明所有成员
- mysql - 如何根据以前的值更新列?
- python - 如何在 keras 2.0 中使用点合并?
- python - Tkinter 按钮默认无限大