给你n个数字,请你找出出现至少(n+1)/2次的数字。

输入

本题包含多组数据,请处理到EOF:
每组数据包含两行。
第一行一个数字N(1<=N<=999999) ,保证N为奇数。
第二行为N个用空格隔开的整数。

输出

对于每组数据,输出一行,表示要求找到的那个数

样例输入

5
1 3 2 3 3
11
1 1 1 1 1 5 5 5 5 5 5
7
1 1 1 1 1 1 1

样例输出

3
5
1

思路:第一种思路是将数组排序,由于其出现(n+1)/2   次,故中位数一定是要找的那个数。时间复杂度O(nlogn)

#include<cstdio>
#include<cstring>
#include <iostream>
#include<algorithm>
using namespace std;
const int maxn=1000005;
int a[maxn],b[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
//int t;
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
printf("%d\n",a[(n-1)/2]);
}
return 0;
}

另一种就是网上题解中比较常见的了,不得不说思路确实很棒,复杂度O(n)

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std; const int N = 1000005;
int a[N]; int main()
{
int n;
while(~scanf("%d", &n))
{
int num = 0;
int ans = -1;
for(int i=0; i<n; i++)
{
scanf("%d", &a[i]);
if(num == 0)
{
++num;
ans = a[i];
}
else
{
if(ans != a[i])
num--;
else
num++;
}
}
printf("%d\n", ans);
}
return 0;
}

最新文章

  1. 机器学习实战笔记(Python实现)-02-决策树
  2. Linux课程实践一:Linux基础实践(SSH)
  3. SharePoint 2010 站点附加数据升级到SP2013
  4. C# “快捷方式” 实现程序开机启动
  5. CSS 块状元素和内联元素
  6. 读取Cookie及Cookie所有属性操作方法
  7. linux下64位汇编的系统调用系列
  8. [转] JS运算符 &amp;&amp;和|| 及其优先级
  9. TransactionScope使用说明 【转】
  10. QT完美转换特殊字符的大小写
  11. oracle触发农产品证明文件号码
  12. BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
  13. bootcamp分区_BOOTCAMP 删除分区失败
  14. UIImagePickerDelegate - 官方文档说明
  15. SQL 中使用 WITH AS 提高性能
  16. vue文档全局api笔记1
  17. [hbase] hbase 基础使用
  18. java高级----&gt;Java观察者的原理
  19. Python中*args和**kwargs
  20. TurboLinux系统管理习题一

热门文章

  1. 跨平台C++开源码的两种经常使用编译方式
  2. oracle capability i/o(压力測试数据库serveri/o性能)
  3. java js url传参中文乱码
  4. ASP.NET MVC 认证模块报错:“System.Configuration.Provider.ProviderException: 未启用角色管理器功能“
  5. luogu1081 开车旅行 树上倍增
  6. git 拉取和获取 pull 和 fetch 区别【转】
  7. DMA(direct memory access)直接内存访问
  8. C - Tram
  9. .Net Core(二) 下
  10. CDC之fast-&gt;slow (2)