0

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

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

8 回答 8

3
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);
于 2009-05-12T08:41:45.233 回答
2

如果已经排序,可能有更快的方法

将列表分成两半。以这种方式处理每个部分:测试第一个和最后一个数字。如果它们相同,您就知道结果。如果不一样,则将其拆分为中间并再次递归每一半。

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

这种方法也是可并行的。

于 2009-05-12T08:56:05.460 回答
1

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

于 2009-05-12T08:59:53.330 回答
1

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

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

于 2009-05-12T08:42:12.330 回答
0

简单的例子解释。

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

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

排序和简单的程序/功能

于 2009-05-13T11:27:16.123 回答
0

一个好的方法是遍历数组中的元素并计算你看到的每个元素的数量。一旦你完成了,你打印出你得到的计数。

于 2009-05-12T08:27:18.877 回答
0
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));
}
于 2009-05-13T07:36:34.130 回答
0

已处理:
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 
于 2009-05-13T12:07:59.473 回答