您的位置:首页 > 其它

数组之找出Array中重复次数最多的数

2017-04-13 15:43 337 查看
//方法一:假设数组已排好序,时间复杂度为O(n);
//若数组未排序,此方法要先排序,用快排O(nlogn),总时间复杂度为O(nlogn);
#include<iostream>
using namespace std;
int findMostAppersNum(int *nums,int len)
{
int mostCount=1;
int currCount=1;
int mostNum=nums[0];
for(int i=0;i<len-1;i++)
{
int index=i+1;
if(nums[i]==nums[index])
{
currCount++;
if(currCount>mostCount)
{
mostCount=currCount;
mostNum=nums[i];
}
}
else
currCount=1;

}
return mostNum;
}
int main()
{
int A[]={1,1,1,1,1,1,2,4,4,4,4,5,5,6,6,6,6,6,6,6,6,6,6,6,8,8,8};
int len=(sizeof(A)/sizeof(A[0]));
int mostNum=findMostAppersNum(A,len);
cout<<mostNum<<endl;
system("pause");
return 0;
}

//方法二:利用hash表;数组无需排序,用map的value来记录每个元素出现的次数,然后判断次数大小;
//关联性容容器map的特性之一:所有元素会根据元素的键值自动被排序;map不允许两个元素拥有相同的键值;
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int findMostAppersNum(vector<int> &nums)
{
map<int,int> maping;
int len=nums.size();
int mostCount=1;
int mostNum=nums[0];
for(int i=0;i<len;i++)
{
maping[nums[i]]++;
if(maping[nums[i]]>mostCount)
{
mostCount=maping[nums[i]];
mostNum=nums[i];
}
}
return mostNum;
}
int main()
{
int A[]={1,1,1,1,2,4,4,4,4,4,4,4,4,5,5,6,6,6,6,8,8,8,8,8};
int len=(sizeof(A)/sizeof(A[0]));
vector<int> nums(A,A+len);
int mostNum=findMostAppersNum(nums);
cout<<mostNum<<endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: