C程序设计的抽象思维-算法分析-大多数元素

【问题】

请编写以下函数 int MajorityElement(int array[],int n);

该函数返回数组array中的多数元素。多数元素是指在占绝对多数(至少51%)的一个值。如果多数元素不存在,那么返回常量NoMajorityElement,该函数必须满足下面的条件:

1. 必须以O(N)时间运行。

2. 必须使用O(1)的附加空间。换句话说,可用个别的临时变量,而不可以使用任何的临时数组。并且不能使用递归解决,这是因为随着递归层数加深,会需要空间来存储栈帧。

3. 不能改变数组中的任何元素的值。

【代码】

#include <stdio.h>

void MajorityElement(int array[], int n)
{
	int majority, i, count;
	majority = array[0];
	count = 1;
	for(i = 1; i < n; i++){
		if(majority != array[i]){
			if(count == 0){
				majority = array[i];
				count++;
			}else{
				count--;
			}
		}else{
			count++;
		}
	}
	if(count > 0)
		printf("MajorityElement: %d\n", majority);
	else
		printf("NoMajorityElement\n");

}

main()
{
	int array[5] = {1, 2, 1, 2, 3};
	MajorityElement(array, 5);
}

C程序设计的抽象思维-算法分析-大多数元素,布布扣,bubuko.com

时间: 2024-10-26 11:46:40

C程序设计的抽象思维-算法分析-大多数元素的相关文章

C程序设计的抽象思维-递归入门

[斐波那契序列] 序列中的每一个新项都是它前两项的和. 0    1     1     2     3      5      8       13       21       34      55       89       144  ---- 数学表达式表示序列中的一个新项:   tN = tN-1 +  tN-2 像这种类型的表达式,序列中的每一个元素都是由先前的元素来确定,这种序列称为递归关系. 斐波那契序列的完整定义如下: tn =  n       n= 0 或者 n= 1 t

C程序设计的抽象思维-递归过程-格雷码

[问题] 每一对相邻整数的二进制表示只有一位发生变化,这种编码称为Gray码. 如下所示3位的Gray码: 000 0 001 1 011 2 010 3 110 4 111 5 101 6 100 7 要产生N位的Gray码,所需的递归思想概括如下: 1. 写出N-1位的Gray码. 2. 以相反的顺序在该Gray码下重写一遍. 3. 在第一步得到的Gray码前加0,在第二步得到的Gray码前加1. 继续以3位Gray码为例,推导过程如下所示: [代码] #include <stdio.h>

C程序设计的抽象思维-递归过程-砝码称重

[问题] 在狄更斯时代,商人们用砝码和天平来称量商品的重量,如果你只有几个砝码,就只能精确地称出一定的重量.例如,假定只有两个砝码:分别是1kg和3kg.只用1kg的砝码可以称出1kg重量的商品,只用3kg的砝码可以称出3kg重量的商品.1kg和3kg的砝码放在天平同一边可以称出4kg重量的商品,放在不同边可以称出2kg重量的商品.因此利用这两个砝码,我们可以称出重量分别为1.2.3.4kg的商品. 编写一个递归函数: bool IsMeasurable(int target, int weig

C程序设计的抽象思维-回溯算法-迷宫问题

[迷宫问题] 两种方法:1. 堆栈回溯,2.递归回溯. [算法1---堆栈回溯] 计算机解迷宫时,通常用的是"试探和回溯"的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走:否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止,如果所有可能的通路都试探过,还是不能走到终点,那就说明该迷宫不存在从起点到终点的通道. 1.从入口进入迷宫之后,不管在迷宫的哪一个位置上,都是先往东走,如果走得通就继续往东走,如果在某个位置上往东走不通的话,就依次试探往南.往西和往

javascript高级程序设计第三版dom元素大小笔记

是滚动大小(scroll dimension),指的是包含滚动内容的元素的大小.有些元素(例如 <html>元素),即使没有执行任何代码也能自动地添加滚动条:但另外一些元素,则需要通过 CSS 的 overflow 属性进行设置才能滚动.以下是 4 个与滚动大小相关的属性. 在IE8以下scrollHeight=元素内容本身的高度. 1.增加边框,不同浏览器有不同解释. 谷歌火狐IE>=8会忽略边框的大小. 2,增加内边距,最终值是width||height+padding ie8以下是

计算机科学类书籍

推荐原则:宁缺勿滥,决不混进糟粕 (好书不一定对所有人都合适,但对于它的目标读者群来说,一定是好书). 选书原则:有国外的,不看国产的有原版的,不看翻译的看大师的作品 看书原则: 语言只是一种工具,它的作用就是完成你的工作.不管把C的语法学得如何透彻,也不管把C的技巧用得如何精妙,这都不能表示你会编程.要学会如何分析问题,如何设计程序,如何用一种具体的语言来实现.如果你只会做最后一步,你只是一个编码者 (coder),还不是一个程序员(programmer).做一个programmer,不要做c

【转】给计算机专业大学生整理的书单

闲来无事,利用大半天的时间将自己对计算机课程的而看法整理成一张书单,希望对现在仍然迷茫的大学生有帮助.(转载请注明出处) 本人推荐的97%以上的书籍都是国外书籍,国内大学的教材还是别看了.切记,切记! 0.000 计算机科学导论 教材: 1.<编码:隐藏在硬件背后的语言> 2.<通灵芯片> 3.<D is for digital:What a well-informed person should know about computers and communications

计算机经典教材

(计算机牛人的必由之路) 1 前言 2 Mathematics (数学) 3 Data Structures & Algorithms (数据结构.算法) 4 Compiler (编译原理) 5 Operating System (操作系统) 6 Database (数据库) 7 C (C 语言) 8 C++ (C++ 语言) 9 Object-Oriented (面向对象) 10 Software Engineering (软件工程) 11 UNIX Programming (UNIX编程)

C/C++面试题目一

C/C++开发工程师面试题目(一)(附答案分析) 推荐:自己根据在面试中碰到做过的一些题目以及总结的题目,希望对面试的同学有所帮助. 一. 选择题 1. 下列类中(  )不是输入输出流类iostream的派生类. A. fstream      B. ofstream     C. strstream    D. ostrstream 答案:BD 解析:ofstream和ostrstream派生自ostream,而不是iostream.