-1

有人可以给我一个算法来一次计算整数数组的不同元素吗?

例如,我可以尝试使用 for 循环遍历数组

我会将第一个元素存储在另一个数组中。随后的元素将与第二个数组中的元素进行比较,如果它不同,那么我会将其存储在该数组中并递增计数器。

谁能给我一个比这更好的算法。

使用 c 和 c++

4

4 回答 4

1

假设您的元素是整数,并且它们的值介于0和之间MAXVAL-1

#include <stdio.h>
#include <string.h>

#define MAXVAL 50

unsigned int CountDistinctsElements(unsigned int* iArray, unsigned int iNbElem) {
  unsigned int ret = 0;

  //this array will contains the count of each value
  //for example, c[3] will contain the count of the value 3 in your original array
  unsigned int c[MAXVAL];
  memset(c, 0, MAXVAL*sizeof(unsigned int));

  for (unsigned int i=0; i<iNbElem; i++) {
    unsigned int elem = iArray[i];
    if (elem < MAXVAL && c[elem] == 0) {
      ret++;
    }
    c[elem]++;
  }
  return ret;
}

int main() {
  unsigned int myElements[10] = {0, 25, 42, 42, 1, 2, 42, 0, 24, 24};
  printf("Distincts elements : %d\n", CountDistinctsElements(myElements, 10));
  return 0;
}

输出:(Ideone链接

区别元素:6

于 2013-09-20T12:53:56.733 回答
0

维护一系列结构。结构应该有一个值和该值的计数器。只要您在正在测试的数组中传递一个新元素,就创建一个具有值的结构并将计数器递增 1。如果您传递数组中的现有元素,则只需访问相关结构并将其计数器递增 1。最后在你对数组进行一次完整的传递,您将在结构数组中获得所需的结果。

于 2013-09-20T12:43:00.307 回答
0

编辑:我不知道你只想计算元素。更新了下面的代码。

int countUnique()
{
    uniqueArray[numElements];
    myArray[numElements];
    int counter = 0;
    int uniqueElements = 0;

    for(int i = 0; i < numElements; i++)
    {
       element tempElem = myArray[i];
       if(!doesUniqueContain(tempElem, counter, uniqueArray)//If it doesn't contain it
       {
            uniqueArray[counter] = tempElem;
            uniqueElements++;
       }
    }
    return uniqueElements;
}

bool doesUniqueContain(element oneElement, int counter, array *uniqueArray)
{
    if(counter == 0)
    {
        return false; //No elements, so it doesn't contain this element.
    }
    for(int i = 0; i < counter; i++)
    {
        if(uniqueArray[i] == oneElement)
            return true;
    }
    return false;
}

这只是为了让您可以看到逻辑

于 2013-09-20T12:54:53.520 回答
0

如何使用哈希表(在 Java HashMap 或 C# 字典意义上)来计算元素?基本上,您创建一个空哈希表,其中数组元素类型作为键类型,计数作为值。然后你遍历你的列表。如果该元素尚未在哈希表中,则将其添加为计数 1,否则将增加该元素的计数。

于 2013-09-20T12:56:49.057 回答