主元素问题(随机算法)
算法设计例题:主元素(随机算法)
memory limit: 5000KB time limit: 1000MS
accept: 1 submit: 5
Description
设T[1:n]是一个含有n个元素的数组(集合)。当 | {i | T[i]=x} | > n/2 时,称元素x是数组T的主元素。
Input
第一行是一个正整数T,表示测试用例的个数。每个测试用例占两行,第一行是一个整数N( 0 < N < 100000 ),表示集合元素的个数,第二行是N个整数。
Output
为每个测试用例输出一行结果:如果该集合有主元素,输出该主元素,如果没有主元素,则输出 no 。
Sample Input
2
10
3 5 7 3 9 3 3 1 3 3
10
3 3 3 3 1 2 4 5 6 7
Sample Output
3
no
Author
John
解决方法:
#include<stdio.h>
#include<cstdlib>
#include<time.h>
#define N 200000
int x;
int a[N];//这个不能放在main()函数中,局部变量的数组不能开太大,不然提交的时候会出现"Runtime Error!"
bool b(int a[],int n)
{
int i=rand()%n+1;//产生从1~n之间的整数
x=a[i];
int count=0;
for(int j=1;j<=n;j++)
if(a[j]==x)
count++;
return (count>n/2);
}
bool majority(int a[],int n)
{
if(b(a,n))
return true;
else
return b(a,n);
}
int main()
{
srand((int)time(0));
int n,k=0,testNum;
scanf("%d",&testNum);
while(k!=testNum)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
if(majority(a,n))
printf("%d\n",x);
else
printf("no\n");
k++;
}
return 0;
}
//特别注意的是,当换成c++的输入输出方式提交时会出现"Time Limit Exceed"的提示,当改成C的输入输出方式时就可以通过了,由此可见C的输入输出方式比C++的节省时间
主元素问题(随机算法)相关推荐
- 主元素问题—蒙特卡罗算法
蒙特卡罗(Monte Carlo)方法介绍 蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实 ...
- 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题
1.蒙特卡罗算法 基本概述 蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地 ...
- 随机算法 Las Vegas算法 Monte Carlo算法
随机算法 定义 不要求对所有输入均正确计算,只要求出现错误的可能性小到可忽略(得能解决问题) 同一组输入,不要求同一个结果(不确定) 应用 有些使用确定性求解算法效率会很差的问题,如果用随机算法求解, ...
- 主元素问题(蒙特卡洛法和分治法)
主元素问题描述 设T为一个有n个元素的数组,当T中某个元素x的个数大于n/2时,称x为T的主元素. 蒙特卡洛算法简介 蒙特卡洛算法(Monte Carlo),是一种不确定性化算法,并无法保证一定能够得 ...
- WC Day1 第一课堂 随机算法
设数组含有 n n n 个不同元素,随即快速排序算法的期望比较次数 T ( n ) ≤ 2 n ln n T(n) \leq 2 n\ln n T(n)≤2nlnn 证明 显然随机选取的枢轴元素是 ...
- 主元素问题 Majority Element
2018-09-23 13:25:40 主元素问题是一个非常经典的问题,一般来说,主元素问题指的是数组中元素个数大于一半的数字,显然这个问题可以通过遍历计数解决,时间复杂度为O(n),空间复杂度为O( ...
- labuladong的算法小抄pdf_随机算法:水塘抽样算法
读完本文,你可以去力扣拿下如下题目: 382.链表随机节点 398.随机数索引 -----------我最近在 LeetCode 上做到两道非常有意思的题目,382 和 398 题,关于水塘抽样算法( ...
- 浅浅地谈一下随机算法【poj2454】【poj3318】
随机算法我也只是稍微接触了一下,就是想写篇博客自己稍微总结一下 其实随机算法也算是一个玄学吧,运气不好还是会wa.但是我们知道,计算机可以在短时间内计算大量的数据,所以碰到正确答案的概率还是挺大的. ...
- 权重随机算法的java实现
一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...
最新文章
- Ubuntu 14.04 64bit上安装有道词典Linux版本
- PTA(BasicLevel)-1007素数对猜想
- mysql 普通索引使用方法,Mysql索引类型与基本用法实例分析
- 牛客 - Dress as women(sg定理+位运算)
- linux目录树(书本上看到)
- Android背景透明的 Dialog
- vcneter5.5添加域用户权限
- 【干货】大数据驱动的因果建模在滴滴的应用实践
- C语言基础练习(5)
- c语言不合法字符串常量,不合法的字符常量是什么
- aac mediarecorder录制_Android音视频录制之MediaRecorder+camera
- 闪耀在 UNIX 传奇往事中的启示, UNXI 见证者带你一览究竟
- 第一篇数模论文——估计出租车的总数
- 华为IoT首席架构师王启军:全栈工程师“养成记”
- android launcher 4x5应用排列,修改华为刷机包桌面应用图标布局排序的方法
- Codeup——577 | 问题 C: 等腰梯形
- 再创佳绩|Google Play 2020 年度中国开发者最佳榜单!
- Elastic安全分析新利器 —— Event Query Language (EQL) 介绍
- ERROR send and transfer are only available for objects of type address payable , not address
- 华为od统一考试B卷【最少面试官数】Python 实现