T609552 【标记数组模板】寻找众数

解题思路

这道题目要求找出数组中出现次数最多的数字(众数),如果有多个数字出现次数相同且都是最多,则输出其中最小的那个数字。

方法思路

  1. 标记数组法:使用一个标记数组vis来记录每个数字出现的次数。数组的索引代表数字本身,数组的值表示该数字出现的次数。

  2. 输入处理:读取数组长度n,然后读取n个数字,每读取一个数字x,就将vis[x]的值加1。

  3. 寻找众数:遍历标记数组vis,记录出现次数最多的数字。如果多个数字出现次数相同且都是最多,则选择最小的那个数字。

这种方法的时间复杂度为O(n),因为我们需要遍历整个数组一次进行统计,然后遍历标记数组一次寻找众数。

代码注释

#include<bits/stdc++.h>
using namespace std;
int n,x,vis[100005]; // 定义变量:n为数组长度,x为临时变量,vis为标记数组,记录每个数字出现的次数

int main()
{    //题目2:找出现最多次数的数字 
    cin >> n; // 读取数组长度n
    int maxx = 0,num = 0; // maxx记录当前最大出现次数,num记录对应的数字
    for(int i = 1; i <= n; i++) // 循环读取n个数字
    {
        cin >> x; // 读取当前数字x
        vis[x]++; // 将vis数组中x对应的位置的值加1,表示x出现次数增加
    }
    for(int i = 0; i <= 100000; i++) // 遍历所有可能的数字(0到100000)
    {
        if(vis[i] > maxx){ // 如果当前数字i的出现次数大于maxx
            maxx = vis[i]; // 更新maxx为当前数字的出现次数
            num = i; // 更新num为当前数字i
        }
    }
    cout << num; // 输出出现次数最多的数字
    return 0;
}

 

posted @ 2025-05-20 17:09  CRt0729  阅读(28)  评论(0)    收藏  举报