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

    xiaoxiao2021-04-12  38

    //方法一:假设数组已排好序,时间复杂度为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; }
    转载请注明原文地址: https://ju.6miu.com/read-667071.html

    最新回复(0)