【問題】
請編寫以下函數 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);
}