计算数组中重复的元素

计算数组中的重复元素…..输入是{1,1,1,1,2,2,2,3,3,4}输出

 1=4 2=3 3=2 4=1 

 prev = input[0]; count = 1; for (i = 1; i < ARRAYSIZE; i++) { if (input[i] == prev) count++; else { printf("%d=%d ", prev, count); prev = input[i]; count = 1; } } // Printing the last element printf("%d=%d ", prev, count); 

如果它已经排序,可能会有更快的方式

将列表分成两半。 以这种方式处理每个部分:测试第一个和最后一个nubmer。 如果它们是相同的,你知道结果。 如果它不相同,将其分成中间并再次递归每一半。

使用相同数量的长跑,这将是有效的。 如果一个部分很小,它应该恢复到一个一个方法。 您可以在随机点对数据进行采样,测试s,s + 1,以获得一个数字从其前任增加的时间的百分比。 数字越大,越早切换到逐个方法。

该方法也是可并行化的。

似乎数组已排序(根据示例)。 如果是这样,你只需要选择第一个元素并遍历数组,直到找到一个不同的值。 在此过程中,您可以在循环内设置计数器来计算出现的次数。

然后选择找到的不同值而不是第一个元素并重复该过程。

如果值的范围很小,则可以使用另一个数组来保存每个元素的计数,就像计算排序一样 。 如果值的范围很大,则需要哈希表 。

一个好的方法是遍历数组中的元素并计算每个元素的数量。 完成后,打印出您获得的计数。

 void count_elements(int * pArray, long nElements) { int * pStart; for ( pStart = pArray++; nElements > 1; nElements--, pArray++ ) { if ( *pStart != *pArray ) { printf("%i = %u ", *pStart, (pArray - pStart)); pStart = pArray; } } printf("%i = %u ", *pStart, (pArray - pStart)); } 

简单的例子解释。

//计算每个元素创建一个排序的哈希来保存原始数组中的每个唯一元素(也可以作为链表完成)如果哈希元素已经存在则从数组中读取每个元素增加该键的计数(值)哈希元素不存在创建键值对(value = 1)循环

//通过散列和printf的键(“%d:%d \ n”,键,值)打印每个元素循环; 如果您还需要表示零值,请实现lastKey并执行lastKey比较的键以确定键是否为零

排序和简单的程序/function

处理:
1)数组项结束
2)空箱
3)单身案件

 #include  int main() { int input[] = {1,1,1,1,2,2,2,3,3,4}; if (sizeof(input) == 0) return 0; int prev = input[0]; int count = 1; int i; int ARRAYSIZE = sizeof(input) / sizeof(int); for (i = 1; i < ARRAYSIZE; i++) { if (input[i] == prev) { count++; } else { printf("%d=%d ", prev, count); prev = input[i]; count = 1; } } printf("%d=%d\n", prev, count); return 0; } 

和测试用例:

 when input is {} ----------------------------------- jianlin@ubuntu:~$ gcc try.c jianlin@ubuntu:~$ ./a.out when input is {123} ----------------------------------- jianlin@ubuntu:~$ gcc try.c jianlin@ubuntu:~$ ./a.out 123=1 when input is {1,123} ----------------------------------- jianlin@ubuntu:~$ gcc try.c jianlin@ubuntu:~$ ./a.out 1=1 123=1 when input is {1,1,1,1,2,2,2,3,3,4} ----------------------------------- jianlin@ubuntu:~$ gcc try.c jianlin@ubuntu:~$ ./a.out 1=4 2=3 3=2 4=1 when input is {1,1,1,1,2,2,2,3,3,4,4} ----------------------------------- jianlin@ubuntu:~$ gcc try.c jianlin@ubuntu:~$ ./a.out 1=4 2=3 3=2 4=2