FDU 2018 | 1. 求众数

文章目录

  • [1. 题目描述](#1. 题目描述)
  • [2. 我的尝试](#2. 我的尝试)

1. 题目描述

AcWing 3685 求众数

给定一个长度为 n 的整数序列,请你求出该序列的众数。

众数就是一个序列中出现次数最多的数字。

如果不唯一,则输出小的那个值。

输入格式

第一行输入一个整数 n,表示有 n 个数。

第二行输入 n个整数。

输出格式

输出序列中的众数,如果不唯一,则输出小的那个值。

数据范围
1 ≤ n ≤ 1 0 5 1≤n≤10^5 1≤n≤105, 序列中整数的取值范围 − 1 0 9 , 1 0 9 −10\^9,10\^9 −109,109

输入样例

cpp 复制代码
8
10 3 8 8 3 2 2 2

输出样例

cpp 复制代码
2

2. 我的尝试

数据范围 1 0 5 10^5 105, O ( n l o g n ) O(nlogn) O(nlogn)的算法即可满足,可以先把所有的数读入数组,再对数组排序,然后从头扫描数组找到排序后连续出现最多的数即为众数。

因为题目要求不唯一时输出最小的众数,因此扫描时的更新条件为if (cnt > max)

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;
int a[N];

int main() {
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    
    sort(a, a + n);
    
    int cur = a[0], cnt = 0, res = a[0], max = -1;
    for (int i = 0; i <= n; i++)
    {
        if (i < n && a[i] == cur) cnt ++;
        else {
            if (cnt > max)
            {
                res = cur;
                max = cnt;
            }
            cur = a[i];
            cnt = 1;
        }
    }

    cout << res;
    
}
相关推荐
小星星闪亮登场8 分钟前
Codeforces Round 1115 ( Div. 2)
数据结构·c++·算法·贪心算法·排序算法·codeforces
计算机小白一个9 分钟前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯
Loge编程生活12 分钟前
打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河
开发语言·数据结构·c++·算法·青少年编程
2601_957174651 小时前
大模型算法 简单 容易 用这个方法
算法
VALENIAN瓦伦尼安教学设备1 小时前
激光对中仪采购要点
数据库·嵌入式硬件·算法
Forever Nore3 小时前
LeetCode 1 两数之和
算法·leetcode·职场和发展
To_OC4 小时前
LC 3 无重复字符的最长子串:从入门滑动窗口到优化写法,再也不怕面试官追问
javascript·算法·leetcode
(Charon)4 小时前
【C++】多线程死锁:产生原因、复现与解决方法
开发语言·c++·算法
lucas_AI4 小时前
ConfBench:大模型的「我很有把握」,到底能不能信?
人工智能·算法
oier_Asad.Chen5 小时前
【洛谷题解/AcWing题解/真题】洛谷P2330【SCOI2005】繁忙的都市(Kruskal算法的再探究))
c++·算法·贪心算法·图论·最小生成树·kruskal