当前位置: 首页 > news >正文

牛客网NC22222:超半的数

牛客网NC22222:超半的数

题目描述

在这里插入图片描述

输入输出格式

输入格式:

  • 第一行包含一个整数 n (1 ≤ n ≤ 1000)
  • 第二行包含 n 个整数 a_i (1 ≤ a_i ≤ 10^9)

输出格式:

  • 输出一个整数,表示出现次数超过一半的那个数

解题思路

这道题目有多种解法,本文实现的是最直观的暴力解法。我们对数组中的每个元素,统计它在数组中出现的次数,如果发现某个元素出现次数超过 n/2,则输出该元素并结束程序。

算法流程

  1. 读取数组大小 n 和数组元素
  2. 对于数组中的每个元素 a[i]:
    • 统计 a[i] 在整个数组中出现的次数
    • 如果出现次数大于 n/2,则输出 a[i] 并结束程序

复杂度分析

  • 时间复杂度:O(n²),其中 n 是数组大小。我们需要遍历数组中的每个元素,然后对每个元素再次遍历数组统计频次。
  • 空间复杂度:O(n),用于存储输入数组。

代码实现

#include<bits/stdc++.h>
using namespace std;int main(){int n;cin>>n;int a[n];// 读取数组元素for(int i=1;i<=n;i++){cin>>a[i];}// 寻找出现次数超过一半的元素for(int i=1;i<=n;i++){int s=0;//每次外层循环遍历新元素 a[i] 时,会重新声明并初始化 s=0,确保统计该元素的出现次数时计数器 s 是从零开始累加的for(int j=1;j<=n;j++){if(a[i]==a[j])s++;}if(s>n/2){cout<<a[i];break;}}return 0;
}

示例解析

以示例 1 为例:

输入:
5
1 2 2 3 2输出:
2

执行过程:

  1. 读取 n=5,数组为 [1,2,2,3,2]
  2. 对于 a[1]=1,统计出现次数为 1,不超过 5/2=2
  3. 对于 a[2]=2,统计出现次数为 3,超过 5/2=2
  4. 输出 2 并结束程序

优化思路

虽然本题的暴力解法已经能够解决问题,但当数据规模增大时,可能会超时。以下是一些可能的优化方向:

  1. 哈希表计数:使用哈希表统计每个元素出现的次数,将时间复杂度降至 O(n)
  2. 摩尔投票算法:专门用于找出出现次数超过一半的元素,时间复杂度为 O(n),空间复杂度为 O(1)

注:根据题目要求,本文仅对原有解法进行分析和讲解,未对算法本身进行优化。

相关文章:

  • 【云实验】搭建个人网盘实验
  • leetcode0215. 数组中的第K个最大元素-medium
  • 1基·2台·3空间·6主体——蓝象智联解码可信数据空间的“数智密码”
  • 2025年长三角+山东省赛+ 认证杯二阶段论文发布!
  • 杰理ac696配置mic
  • QT6 源(104)篇一:阅读与注释QAction,其是窗体菜单栏与工具栏里的菜单项,先给出属性测试
  • 【Golang笔记01】Goland基础语法规则
  • 数字经济犯罪案件中的“双刃剑”电子数据
  • Spring2:应用事务+连接池形成的工具类
  • 【匹配】Hirschberg
  • ​小店推客系统开发SEO全攻略:从技术架构到流量裂变,打造私域增长引擎
  • 代码随想录算法训练营第三十八天打卡
  • 文章记单词 | 第86篇(六级)
  • Guided Filtering相关记录
  • EC800X_DP-DTU-Q600R 系列开发板介绍
  • Gen5 应用实例
  • 主打「反激进」的一汽丰田,靠稳扎稳打的技术实现突围
  • 梁文锋署名,DeepSeek-V3新论文揭秘:低成本大模型训练如何突破算力瓶颈?
  • 【omnet++】omnet++6.0.3中调用python
  • 主流数据库排查与优化速查手册
  • 长三角体育节回归“上海时间”,首次发布赛事旅游推荐线路
  • 【社论】城市更新,始终以人为核心
  • “AD365特应性皮炎疾病教育项目”启动,助力提升认知与规范诊疗
  • 李强:把做强国内大循环作为推动经济行稳致远的战略之举
  • 共建医学人工智能高地,上海卫健委与徐汇区将在这些方面合作
  • 新任美国驻华大使庞德伟抵京履职,外交部回应