1.假设不知道元素的数据范围:使用map
遍历数组,将元素以及元素对应的计数存放在map中:
void Count(int *arr,int len)
{
std::unordered_map<int,int> count_;
for(int i = 0; i < len;++i)
{
auto it = count_.find(arr[i]);
if(it != count_.end())
{
it->second++;
}
else
{
count_.insert({arr[i],i});
}
}
}
2. 如果给定了数组A中元素的范围,如1-100,元素作为索引下标
即开辟一个容量为100的数组B,数组B中每个元素的值初始化为0,数组B的下标表示需要统计数组的值,每次遍历到对应的数组A的值,就将数组B对应下标+1的元素值+1(因为下标从0开始)
//假设数组中元素的范围是1-100
void Count(int *arr,int len,int *out)
{
out = new int[100]{0};
for(int i = 0; i < len;++i)
{
out[arr[i]-1] ++;
}
}
第二种数组比第一种更加省空间一些。