如何计算一维数组中重复元素的数量?

时间:2017-04-17 16:37:14

标签: c++ arrays

我有一个大小为N的双数组,其元素由代码计算。看起来像这样:

a,b,a,a,b,c,...

所以它有重复的元素。例如a重复10次,b重复12次等。

我想输出这样的东西:

a:10

b:12

这样做的好算法是什么?

2 个答案:

答案 0 :(得分:1)

如果元素是浮点,则两个值完全相等的概率非常低(由于表示浮点数的方式)。

您可能想要计算两个数字之间的绝对差值,并与某些epsilon值(如1.0E-5)进行比较。如果差值小于epsilon,请考虑值相等。

一种算法是对数组进行排序。只要连续值“相等”,就递增计数器。

答案 1 :(得分:1)

char y[] = { 'a', 'b', 'a', 'c' };
int count[52] = {0};

for (int i = 0; i < (sizeof(x) / sizeof(char)); i++)
{
    if (y[i] >= 65 && y[i] <= 90)
        count[y[i] - 'A']++;
    else if (y[i] >= 97 && y[i] <= 122)
        count[(y[i] - 'a') + 26]++;
}

for (int i = 0; i < 52; i++)
{
    if (i < 26 && count[i] > 0)
        cout << char('A' + i) << ": " << count[i] << endl;
    else if (i >= 26 && count[i] > 0)
        cout << char('a' + i - 26) << ": " << count[i] << endl;
}