问题:
在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。
设计一个算法,找出出现次数最多的数字。
方法1:
排序,然后找出出现次数最多的数字。时间复杂度为O(n2)
方法2:
在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。
设计一个算法,找出出现次数最多的数字。
方法1:
排序,然后找出出现次数最多的数字。时间复杂度为O(n2)
方法2:
空间换时间,时间复杂度为O(n)
方法2代码:
#include<iostream>
using namespace std;
int findmax(int arr[],int len){
//int len = (sizeof(arr)/sizeof(arr[0]));
printf("%d\n",sizeof(arr));
int sp[1000] = {0};
int max = 0;
//存放每个元素出现的次数
for(int i=0;i<len;i++)
{
int index = arr[i]-1;
sp[index]++;
}
//找次数
for(int i=0;i<1000;i++){
if(max<sp[i]){
max=sp[i];
}
}
//找出现次数做多的数字
for(int i=0;i<1000;i++){
if(max==sp[i]){
printf("data:%d,max:%d\n",i+1,max);
}
}
return max;
}
int main(){
int a[]={1,2,3,3,3,3,3,5,5,5,5,7,7,7,7,7,7,7,7,7,8,9,10};
findmax(a,sizeof(a)/sizeof(a[0]));
system("pause");
return 0;
}