Data structures 如何在一次过程中计算数组的不同元素?

Data structures 如何在一次过程中计算数组的不同元素?,data-structures,Data Structures,有人能给我一个算法来计算一个整数数组中的不同元素吗 例如,我可以尝试使用for循环遍历数组 我将把第一个元素存储在另一个数组中,随后的元素将与第二个数组中的元素进行比较,如果它是不同的,那么我将把它存储在该数组和递增计数器中 有人能给我一个比这个更好的算法吗 使用C和C++ +/P> < P>维护一系列结构。 结构应该有一个值和一个该值的计数器。 一旦你在一个被测试的数组中传递了一个新元素,就用value创建一个结构,并将计数器增加1。如果你在数组中传递了一个现有元素,那么只需访问相关的结构并将

有人能给我一个算法来计算一个整数数组中的不同元素吗

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

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

有人能给我一个比这个更好的算法吗


使用C和C++ +/P> < P>维护一系列结构。 结构应该有一个值和一个该值的计数器。 一旦你在一个被测试的数组中传递了一个新元素,就用value创建一个结构,并将计数器增加1。如果你在数组中传递了一个现有元素,那么只需访问相关的结构并将其计数器增加1。


最后,在对数组进行一次完整的遍历之后,您将在结构数组中获得所需的结果。

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

#包括
#包括
#定义最大值50
unsigned int countdistinct元素(unsigned int*iArray,unsigned int iNbElem){
无符号整数ret=0;
//此数组将包含每个值的计数
//例如,c[3]将包含原始数组中值3的计数
无符号整数c[MAXVAL];
memset(c,0,MAXVAL*sizeof(unsigned int));

对于(unsigned int i=0;iEdit):我不知道您只想计算元素。下面更新了代码

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;
}
int countUnique()
{
唯一数组[数值元素];
myArray[numElements];
int计数器=0;
int-uniqueElements=0;
对于(int i=0;i

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

如何使用哈希表(在Java HashMap或C#Dictionary sense中)要对元素进行计数?基本上是创建一个空哈希表,数组元素类型为键类型,计数为值。然后迭代列表。如果元素尚未在哈希表中,则使用计数1将其添加,否则将增加该元素的计数。

您使用的是什么语言?元素是什么?点整型?整型?浮点数?到今天为止,这篇文章的可能副本已经有486个视图。各位成员,如果你觉得这个问题和答案有用,请上传O(n^2)考虑到你必须对每一个被测试的元素在你的结构数组上循环,几乎没有一次通过。如果你通过一个数组的现有元素,为什么你要增加计数器?我要求计算不同的元素。但是这怎么比使用两个for循环和做你正在做的相同的事情更好呢?它仍然是两个for循环。为什么在原型Memsetu之后是一个分号。你在这里给出了Memsetu的定义吗?我理解其余的代码,但memset的用法是什么?将
c
的所有值初始化为零。非常感谢你的帮助。我的第一个想法也是字典,但是他使用的是C/C++,我假设这也是一个类。