候选人算法

现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数

#include <stdio.h>

int main(int argc, char **argv)
{
	int i, candidate, vote;
	int a[10]={1,2,3,1,2,1,1,6,1,1}; 

	candidate = 1<<31;
	vote = 0;
	for (i = 0; i < 10; i++) {
		if (a[i] != candidate) {
			if (vote == 0) {	/* 废掉candidate, 把a[i]作为新的候选人 */
				candidate = a[i];
				vote = 1;
			}
			else {			/* 候选人的票减1 */
				vote--;
			}
		}
		else {				/* 候选人的票加1 */
			vote++;
		}
	}
	// 最后剩下的候选人即为出现次数超过一半的数
	printf("candidate = %d, vote = %d\n", candidate, vote);

	return 0;
}
时间: 2025-01-17 08:48:14

候选人算法的相关文章

10个强大的Apache开源模块

Apache是一款非常高效地WEB服务器,目前仍居全球最受欢迎的WEB服务器软件之首.Apache其功能强大之处在于我们可以为它开发许多模块,并作一些相应的配置,从而让我们的Apache服务器有更加个性化的功能. 1.单点登录模块 LemonLDAP LemonLdap可以很棒地实现Apache的SSO功能,并且可以处理超过 20 万的用户请求.LemonLdap支持Java, PHP, .Net, Perl, Ruby, Python等Web开发技术,也就是说,只要你将WEB应用部署到Apac

算法(7)Majority Element II

题目:找出数组中出现次数大于n/3次的数字 思路:摩尔投票法.所有的帖子中都说:先遍历一遍数组找到备选元素,然后再遍历一遍数组考察下这个元素是否是真的超过n/3,然后就直接上代码,但是现在的问题是:我怎么找到这个备选的元素?!票是怎么投起来的呢?通过参考文章中的代码,大致明白了,醍醐灌顶(http://www.cnblogs.com/grandyang/p/4606822.html).那么怎么遍历一遍数组然后找到备选元素呢?这个算法还得从找到大于一半的数说起:整个数组中有两个不一样的数的时候,就

Raft算法国际论文全翻译

最近在开发强一致性的分布式算法,因此需要深入理解下Raft算法,这里对Raft论文进行了翻译,留以备用 - Sunface. 英文版论文:https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf Raft 是一种通过日志复制来实现的一致性算法,提供了和(多重)Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 是不同的,因此Raft 算法更容易理解和应用.Raft 有几个关键模块:领导人选举.

一致性问题和Raft一致性算法——一致性问题是无法彻底解决的,可以说一个分布式系统可靠性达到99.99…%,但不能说它达到了100%

一致性问题 一致性算法是用来解决一致性问题的,那么什么是一致性问题呢? 在分布式系统中,一致性问题(consensus problem)是指对于一组服务器,给定一组操作,我们需要一个协议使得最后它们的结果达成一致. 更详细的解释就是,当其中某个服务器收到客户端的一组指令时,它必须与其它服务器交流以保证所有的服务器都是以同样的顺序收到同样的指令,这样的话所有的 服务器会产生一致的结果,看起来就像是一台机器一样. 实际生产中一致性算法需要具备以下属性: safety:即不管怎样都不会返回错误的结果

Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。

转自:http://www.cnblogs.com/mindwind/p/5231986.html Raft 协议的易理解性描述 虽然 Raft 的论文比 Paxos 简单版论文还容易读了,但论文依然发散的比较多,相对冗长.读完后掩卷沉思觉得还是整理一下才会更牢靠,变成真正属于自己的.这里我就借助前面黑白棋落子里第一种极简思维来描述和概念验证下 Raft 协议的工作方式. 在一个由 Raft 协议组织的集群中有三类角色: Leader(领袖) Follower(群众) Candidate(候选人

分布式-选举算法

分布式-选举算法 2013-06-01 19:48 2540人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 本文是<分布式系统原理与范型>读书笔记. 分布式选举,现在大家都知道的是Paxos算法..... 许多分布式算法需要一个进程充当协调者.发起者或者其他某种特殊的角色.通常由哪个进程充当这个较色并不重要,重要的是它们中要有一个进程来充当.我们假设每个进程有一个唯一的编号,同时还假设每个进程知道所有其他进程的编号.但是进程不知道当前哪个进程正在运行,以及

机器学习实战之K-Means算法

一,引言 先说个K-means算法很高大上的用处,来开始新的算法学习.我们都知道每一届的美国总统大选,那叫一个竞争激烈.可以说,谁拿到了各个州尽可能多的选票,谁选举获胜的几率就会非常大.有人会说,这跟K-means算法有什么关系?当然,如果哪一届的总统竞选,某一位候选人是绝对的众望所归,那自然能以压倒性优势竞选成功,那么我们的k-means算法还真用不上.但是,我们应该知道2004年的总统大选中,候选人的得票数非常接近,接近到什么程度呢?如果1%的选民将手中的选票投向任何一位候选人,都直接决定了

分布式一致性算法:Raft 算法

Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的思想.如果对 Paxos 算法感兴趣,可以看我的另一篇文章:分布式系列文章--Paxos算法原理与推导 摘要Raft 是用来管理复制日志(replicated log)的一致性协议.它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同.这使得 Raft 比 Pax

一致性算法--Raft

分布式一致性算法--Raft 前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现.有关Raft协议和工程实现可以参考这个链接https://raft.github.io/,里面包含了大量的论文,视屏已经动画演示,非常有助于理解协议.概念与术语leader:领导者,提供客户提供服务(生成写日志)的节点,任何时候raft系统中只能有一个leader.follower:跟随者,被动接受请求的节点,不会发送任何请求,只会响应来自