1. 程式人生 > >求整數序列主元素

求整數序列主元素

定義一個整數序列的主元素為出現次數超過序列元素個數一半的元素。

#include <bits/stdc++.h>

#define ArrayLen(array) sizeof(array)/sizeof(array[0])
/*
* Created by HarvestWu on 2018/11/11.
*/
using namespace std;
int Majority(int A[], int n){
	int temp, count = 1;
	temp = A[0];
	for (int i = 1; i < n; i++){
		if (A[i] == temp)
			count++;
		else if (count>0)
			count--;
		else{//更換候選主元,重新計數
			temp = A[i];
			count = 1;
		}
	}
	if (count>0){//統計候選主元實際出現次數
		count = 0;
		for (int i = 0; i < n; i++){
			if (A[i] == temp)count++;
			if (count>n / 2)return temp;//滿足主元定義,可直接返回主元,演算法結束
		}
	}
	return -1;
}
int main(){

	int A[] = { 1, 3, 5, 5, 5, 7, 9, 11 };

	cout << Majority(A, ArrayLen(A));
	return 0;
}