给定一个数组a,想要查找数组中各元素出现次数,实现的思想类似于桶排序思想。
!前提:要知道所给数组中的最大值 max
<1>申请一个数组 b,数组长度为 max ,将数组中所有元素置0
int b[max+1] = {0};
<2>遍历原数组 a ,每次循环都将 数组b中下标为a[i]的元素加1
for(int i = 0; i < N; b[a[i++]]+=1);
<3>若想查找数组中某元素出现次数:直接输出 数组b中下标为此元素 的值
<4>若想查找数组中重复出现的元素:遍历数组b,输出数组b中值大于1的元素下标
!优点:时间复杂度为o(n)
!缺点:1.必须知道所给数组的最大值
2.对于元素较大的数组不建议
3.虽降低了时间复杂度,但提升了空间复杂度
#include <stdio.h>
#define N 10
#define MAX 20
int Check(int a[]);
int Check(int a[])
{
int b[MAX+1]={0};
int i;
for(i=0;i<N;b[a[i]]++,i++);
for(i=0;i<MAX+1;i++)
if(b[i]>1)
return i;
}
int main(void)
{
int a[N],i,check;
printf("请输入一个数组:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
check=Check(a);
printf("\n重复值为:%d\n",check);
return 0;
}