定义一个整数序列的主元素为出现次数超过序列元素个数一半的元素。
#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;
}