计算数组中重复的元素

时间:2009-05-12 08:24:15

标签: c arrays count

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

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

8 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

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

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

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

此方法也可并行化。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

如果值的范围很小,则可以使用另一个数组来保存每个元素的计数,非常类似于counting sort。如果值范围很大,则需要hash table

答案 4 :(得分:0)

一个好方法是遍历数组中的元素并计算每个元素中有多少元素。完成后,打印出你得到的计数。

答案 5 :(得分: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));
}

答案 6 :(得分:0)

简单的解释说明。

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

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

排序和简单的程序/功能

答案 7 :(得分: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