【问题】
请编写以下函数 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