java蒙特卡罗求主元素,【算法题】6.求主元素

news/2024/7/9 20:47:24 标签: java蒙特卡罗求主元素

题目

已知⼀个整数序列A = (a0,a1,a2,...an-1),其中(0<= ai <=n),(0<= i<=n). 若存在ap1= ap2 = ...=apm = x,且m>n/2(0<=pk

题目大意:

主元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

输入:

[1,2,5,9,5,9,5,5,5]

输出:

5

解析:

摩尔投票算法

维护一个候选众数 candidate 和它出现的次数 count。初始时 candidate 可以为任意值,count 为 0;

遍历数组 nums 中的所有元素,对于每个元素 x,在判断 x 之前,如果 count 的值为 0,我们先将 x 的值赋予 candidate,随后我们判断 x:

如果 x 与 candidate 相等,那么计数器 count 的值增加 1;

如果 x 与 candidate 不等,那么计数器 count 的值减少 1。

在遍历完成后,candidate 即为整个数组的众数。

遍历数组中,candidate出现的次数是否大于n / 2,大于返回candidate ,否则返回-1。

复杂度分析

时间复杂度:

math?formula=O(n)

空间复杂度:

math?formula=O(1)

代码

int MainElement(int *A,int n){

int count = 0;

int key = A[0];

for (int i = 0; i < n; i++)

{

if (A[i] == key)

{

/* code */

}else{

if (count > 0)

{

count--;

}else{

key = A[i];

count = 1;

}

}

}

if (count > 0)

{

for (int i =count= 0; i < n; i++)

{

if (A[i] == key)

{

count++;

}

}

}

if (count > n / 2)

{

return key;

}

return -1;

}


http://www.niftyadmin.cn/n/1274807.html

相关文章

管道-过滤器软件架构

每个构件都有一组输出和输出&#xff0c;构件读输入的数据流&#xff0c;经过内部处理&#xff0c;然后产生输出数据流。因此&#xff0c;这里的构件称为过滤器&#xff0c;这种风格的连接件就像是数据流传输的管道&#xff0c;将一个过滤顺的输出传到另一个过滤器的输入。 一…

c++ string 字符_Linux shell常用字符串操作总结(详细)

Shell 处理程序的时候&#xff0c;经常会涉及到很多与字符串相关的操作。如 sed、awk 都可以针对字符串进行各种操作。在 shell 中也内置了一系列的操作符号。1)字符串操作(长度、读取、替换)例&#xff1a;#获取字符串长度[rootlocalhost ~]# varI love china[rootlocalhost ~…

php阻止垃圾评论,wordpress阻止垃圾评论终极大招

垃圾评论太多&#xff0c;插件也不起作用。有效方法是修改wp-comments-post.php和模板的functions.php添加如下代码&#xff0c;基本上是只允许手工在本站页面提交评论才可以成功。思路是&#xff1a;请求方式不是post的&#xff0c;一律抛弃&#xff1b;域名来源不是本站的&am…

用Java socket (TCP通信模型)实现一个简单的web 服务器

package cn.magicdu.think.socket;import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket;/*** Http 处理线程* author xiaoduc**/ public class HttpThread extends Thread {private Socket socket;//连接点public HttpThread(Socket socket) {su…

matlab写泰勒中值定理,基于Matlab环境优化Taylor中值定理教学

基于Matlab环境优化Taylor中值定理教学【摘要】 利用Matlab7.01数学软件学习《高等数学》中Taylor中值定理&#xff0c;把传统的教学模式“讲授?记忆”教学过程变成“直觉?探索?思考?猜想?验证”的探究式教学过程。充分利用计算机强大的计算能力和图形处理功能&#xff0…

JavaScript中的try...catch和异常处理

在JavaScript可以使用try...catch来进行异常处理。例如&#xff1a;try { foo.bar();} catch (e) { alert(e.name ": " e.message);} 目前我们可能得到的系统异常主要包含以下6种: EvalError: raised when an error occurs executing code in eval()RangeError: r…

qtmessagebox对话框里自定义按钮文本_微信公众号教程系列——自定义菜单设置介绍...

2019年6月份&#xff0c;我曾经写过一篇文章《公众号自动回复如何设置》&#xff0c;当时这篇文章很受大家喜欢&#xff0c;粉丝们说我解答的十分详细&#xff0c;一年过去了&#xff0c;仍然有很多人加我询问相关问题&#xff0c;我内心备受鼓舞&#xff0c;我强烈的感受到&am…

黑板架构风格

黑板架构包括知识源、黑板和控制3个部分&#xff0c;知识源包括若干独立计算的不同单元&#xff0c;提供解决问题的知识&#xff0c;知识源响应黑板上的变化&#xff0c;也只修改黑板。黑板是一个全局数据库&#xff0c;包含解域的全部状态&#xff0c;是知识源互相作用的唯一媒…