思路:
最简单的方法就是定义一个数组b把相同的元素放到对应位置,如果数组a的元素等于这个下标,那么这个下标对应的值就加1,最后找出这个数组中最大值返回下标,这个方法浪费很大空间,不推荐。
新的思路:采用map,定义一个map,初始值默认为0,循环遍历数组a,把map中key值是a中此时元素的value加1,初始定义一个val假设map[val]最大,最后每次遍历都和这个值比较,如果大于这个值,那么val就重新复制为a[i],具体实现为:
#include<iostream>
#include<map>
using namespace std;
int getMax(int *a,int len,int val);
int main()
{
int b[]={1,5,4,3,4,4,5,4,5,5,6};
cout<<getMax(b,11,0);
}
int getMax(int *a,int len,int val)
{
if(len==0)
{
cout<<"长度为0不合法"<<endl;
return -1;
}
map<int,int> m;
for(int i=0;i<len;i++)
{
m[a[i]]++;
if(m[a[i]]>=m[val])
val=a[i];
}
return val;
}
最后输出:5