计算数组中重复的元素.....输入是{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);
如果已经排序,可能有更快的方法
将列表分成两半。以这种方式处理每个部分:测试第一个和最后一个数字。如果它们相同,您就知道结果。如果不一样,则将其拆分为中间并再次递归每一半。
对于相同数量的长时间运行,这将是有效的。如果部分很小,它应该恢复为一对一的方法。您可以在随机点对数据进行采样,测试 s、s+1,以获得一个数字从其前身增加的时间百分比。数字越高,您应该越早切换到一对一的方法。
这种方法也是可并行的。
似乎数组已排序(根据示例)。如果是这样,您只需要选择第一个元素并遍历数组,直到找到一个不同的值。在此过程中,您可以在循环中使用一个计数器来计算出现次数。
然后选择找到的不同值而不是第一个元素并重复该过程。
简单的例子解释。
// 计算每个元素的数量 创建一个排序散列来保存原始数组中的每个唯一元素(也可以作为链表完成) 如果散列元素已经存在,则从数组中读取每个元素 增加该键的计数(值)如果哈希元素不存在创建键值对(value = 1)循环
// 通过散列的键和 printf("%d: %d\n", key, value); 打印每个元素循环 如果您还需要表示零值,请实现 lastKey 并与 lastKey 进行比较以确定键是否为零
排序和简单的程序/功能
一个好的方法是遍历数组中的元素并计算你看到的每个元素的数量。一旦你完成了,你打印出你得到的计数。
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));
}
已处理:
1) 数组项结束
2) 空案例
3) 单例案例
#include <stdio.h>
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