C++ 在整数数组中查找频率最高的元素(如果可能,最小的元素)及其出现次数

C++ 在整数数组中查找频率最高的元素(如果可能,最小的元素)及其出现次数,c++,arrays,algorithm,integer,find-occurrences,C++,Arrays,Algorithm,Integer,Find Occurrences,问题:找到2件事 给定未排序整数数组中的最高出现次数 出现次数最多的元素,如果有多个元素满足(出现次数最多的相同的),则结果为最小的元素 请尽可能简单地解决问题,不要使用指针或任何高级容器,如hashtable、pair或map(我是初学者) 例如: {1, 2, 8, 2, 5, 0, 5} 答案是2和2(元素2和5都出现两次,但2最小) 下面是代码,但它只找到正确的最高匹配项 int A[] = {1, 2, 8, 2, 5, 0, 5}; int N = 7; int max

问题:找到2件事

  • 给定未排序整数数组中的最高出现次数
  • 出现次数最多的元素,如果多个元素满足(出现次数最多的相同的),则结果为最小的元素
请尽可能简单地解决问题,不要使用指针或任何高级容器,如hashtable、pair或map(我是初学者)

例如:

{1, 2, 8, 2, 5, 0, 5}
答案是2和2(元素
2
5
都出现两次,但
2
最小)

下面是代码,但它只找到正确的最高匹配项

int A[] = {1, 2, 8, 2, 5, 0, 5};
int N = 7;
    int maxCount = 0;
    int minMode = 0;
    for (int i = 0; i <= N - 1; i++) {
           int count = 0;
           for (int j = 0; j <= N - 1; j++) {
             if (A[i] == A[j])
                 count++;
       }
      if (count >= maxCount)
        {
            maxCount = count;
            minMode = A[i];
        }

     }
        cout << maxCount << " " << minMode << endl;
inta[]={1,2,8,2,5,0,5};
int N=7;
int maxCount=0;
int minMode=0;
对于(inti=0;i这个问题是O(n),但如果不使用结构,它就变成了O(n²)

下面是一个简单的O(n²)解决方案:

int main(){    
    int A[7] = {1, 2, 8, 2, 5, 0, 5};
    int value, occurrences;
    int maxValue = 99999999, maxOccurrences = 0;
    for(int i = 0; i < 7; i++){
        value = A[i]; occurrences = 0;
        for(int j = 0; j < 7; j++) if(A[j] == value) occurrences++;
        if(occurrences > maxOccurrences){
            maxValue = value; maxOccurrences = occurrences;
        }
        else if(occurrences == maxOccurrences){
            if(value < maxValue) {
                maxValue = value; 
                maxOccurrences = occurrences; 
            }
        }       
    }
    cout<<maxValue<<" occurs "<<maxOccurrences<<" times"<<endl;
}
int main(){
inta[7]={1,2,8,2,5,0,5};
int值,出现次数;
int maxValue=9999999,maxoccurrencess=0;
对于(int i=0;i<7;i++){
值=A[i];出现次数=0;
对于(int j=0;j<7;j++)如果(A[j]==值)出现++;
如果(引用>最大引用){
最大值=值;最大引用数=引用数;
}
else if(出现次数==最大出现次数){
如果(值<最大值){
最大值=最大值;
最大发生次数=发生次数;
}
}       
}

使用映射并不是真正的“高级”,而是使用
std::map
使它尽可能简单。我们这里有一个语言问题:“最高出现次数”和“最高出现次数的元素”之间有什么区别?@idclev显然,这是一种家庭作业或测试,其中包括了这一要求,以确保所有参与者在平等的基础上比赛,确保他们真正了解如何解决问题,而不使用现成的设施,这些设施通过魔术为他们完成所有工作,而他们不了解如何工作。MikeNakis很清楚地指出,地图是要避免的,因为他们认为地图是“先进的”,想要一个“简单的”。解决方案。这个前提是错误的,因为使用地图很简单。如果这是一个硬要求,应该在question@MikeNakis真的很感激,但是你能建议编辑它吗?但是为什么maxValue用一个大的值初始化,因为它使存储最小的值更容易。你可以从任何值开始,这不是什么大问题。