求一个整型数组中出现次数最多的一个元素,要求具备较高的效率

本文介绍了一种高效的方法来找出整数数组中出现次数最多的整数,并通过C++实现具体算法流程。该方法首先使用随机数填充数组,然后进行排序,最后遍历数组确定出现次数最多的元素及其频次。

/*如何在一个有N个元素的整数数组中找出出现次数最多的一个整数,要求具备较高的效率.

Author:Bill Joy.

*/

#include<iostream>
#include<vector>
#include<ctime>
#include<cstdlib>

using namespace std;
const int N = 128;
int main()
{
    vector<int> vec;
    vec.reserve(N);
    srand(time(NULL));
    int i;
    for(i = 0;i<N;++i)
    {
        vec.push_back(rand()%50);
    }
    sort(vec.begin(),vec.end());
    vector<int>::iterator ite;
    for(ite = vec.begin();ite != vec.end();++ite)
    {
        cout<<*ite<<"     ";
    }
    cout<<endl;
   
    int max = 0; //记录元素出现的最大次数
    int temp = 0; //同时记录当前的元素值
    int j;
    i = 0;
    while(i<N)
    {
        int count = 1;
        for(j = i + 1;j<N && vec[i] == vec[j]; ++j)
        {
            ++count;
        }
        if(count > max)
        {
            max = count;
            temp = vec[j-1];
        }
        i = j;
    }
    cout<<"The Number is : "<<temp<<endl;
    cout<<"And the counter is : "<<max<<endl;
       
    system("pause");
    return 0;
}
 

在Java中,可以使用HashMap来统计每个元素的出现次数,然后遍历HashMap找到出现次数最多的两个元素。这里是一个简单的示例: ```java import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5, 2, 2, 3, 1, 1}; // 示例数组 // 使用HashMap存储每个元素及其出现次数 Map<Integer, Integer> frequencyMap = new HashMap<>(); for (int num : array) { frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); } // 找到出现次数最多的两个元素 int maxCount = 0; int secondMaxCount = 0; int firstElement = -1, secondElement = -1; for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) { if (entry.getValue() > maxCount) { secondMaxCount = maxCount; secondElement = firstElement; maxCount = entry.getValue(); firstElement = entry.getKey(); } else if (entry.getValue() > secondMaxCount && entry.getValue() < maxCount) { secondElement = entry.getKey(); } } // 如果有两个相同的最大值,则第二个元素可能是第一个的最大值之后的一个 if (secondElement == -1 || frequencyMap.get(firstElement) == frequencyMap.get(secondElement)) { secondElement = null; // 或者设置为某个特定值,如Integer.MIN_VALUE表示未知 } // 打印结果 System.out.println("出现次数最多元素是:" + firstElement); if (secondElement != null) { System.out.println("其次出现最多的是:" + secondElement); } else { System.out.println("只有一个出现次数最多元素"); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值