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);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章