C++中数组中的重复计数
例如,我想做一个程序来计算重复了多少个数字 arr1[]={1,2,3,4,5,1,2}输出应该是2,因为数字1和2有重复项 arr2[]={1,1,1,2,2,3,3}输出应该是3,因为数字1,2和3有重复项 我看不到我的问题的具体答案,因为答案总是与计数一起出现,数字在数组中重复了多少次 反正这是我自己的密码C++中数组中的重复计数,c++,arrays,C++,Arrays,例如,我想做一个程序来计算重复了多少个数字 arr1[]={1,2,3,4,5,1,2}输出应该是2,因为数字1和2有重复项 arr2[]={1,1,1,2,2,3,3}输出应该是3,因为数字1,2和3有重复项 我看不到我的问题的具体答案,因为答案总是与计数一起出现,数字在数组中重复了多少次 反正这是我自己的密码 #include <iostream> using namespace std; int main () { int arr[64],n,clamp=0,ctr=
#include <iostream>
using namespace std;
int main ()
{
int arr[64],n,clamp=0,ctr=0,maxv = 0;
cout<<"Enter desired number of element"<<endl;
cin>>n;
cout<<"Enter "<<n<<" numbers"<<endl;
for(int x=0;x<n;x++)
{
cin>>arr[x];
}
for(int i=0;i<n;i++)
{
if(arr[i]>maxv)
maxv=arr[i];
}
for(int y=0;y<=maxv;y++)
{
for(int x=0;x<n;x++)
{
if(y==arr[x])
{
ctr++;
}
if(ctr>=2)
{
clamp++;
ctr=0;
break;
}
}
ctr=0;
}
cout<<"The amount of repeated elements is "<<clamp<<endl;
return 0;
}
您可能需要使用std::map并检查密钥是否已经在其中。
然后,每次您想要将某个内容推入该索引时,您只需增加该值 如果某个字符已经存在,我会使用一个哈希表std::map来存储:
#include<map>
int GetRepeatingCharacterNumber(int* pArray, int nCount)
{
std::map<int, int> exists;
int result = 0;
for (int i = 0; i < nCount; ++i)
{
if (exists.find(pArray[i]) == exists.end())
{
//not found
//add to map
exists[pArray[i]] = 1;
}
else
{
//already in there
//check if it already counted
if (exists[pArray[i]] == 1)
{
//second time found
result++;
}
exists[pArray[i]] += 1;
}
}
return result;
}
正如其他地方指出的,std::map是最明显的解决方案,但它可以比sebi的答案更简洁地完成
template<typename Iterator,
typename Compare = std::less<typename std::iterator_traits<Iterator>::value_type> >
size_t max_number_of_repetitions(Iterator begin, const Iterator end)
{
using key = typename std::iterator_traits<Iterator>::value_type;
std::map<key, size_t, Compare> rep;
size_t max_rep = 0;
for(; begin!=end; ++begin)
max_rep = std::max(max_rep, ++(rep[*begin]));
return max_rep;
}
int main()
{
int arr1 [] = {1,2,3,4,5,1,2};
int arr2 [] = {1,1,1,2,2,3,3,3};
std::cout<<max_number_of_repetitions(std::begin(arr1),std::end(arr1))<<'\n'
<<max_number_of_repetitions(std::begin(arr2),std::end(arr2))<<'\n';
}
排序和检查是否可以接受?您还可以使用hashtableWelcome来处理堆栈溢出。请花时间阅读并参考你在这里所问的内容和你如何问的东西。你不知道你已经找到了一些可能的方法的步骤1?我确实有,但是它们和我在C++中的知识相比进步太大了,这就是为什么我想保持它的简单性,这样我就可以跟踪逻辑,然后再前进到下一步。将使用std::map来实现这一点。它比排序数组更快,编程工作量更少
2
3