1. 程式人生 > >在O(n)時間複雜度內找出陣列中的眾數

在O(n)時間複雜度內找出陣列中的眾數

bool FindMostApperse(int *num,int len,int &candidate)
{
	int count = 0;
	for(int i = 0;i < len;++i)
	{
		if(count == 0)                         //目前得到的數出現次數為0時,更換另外一個數
		{
			candidate = num[i];
			count = 1;
		}
		else
		{
			if(candidate = num[i])           
				count++;               //相同+1
			else
				count--;              //不同-1,
		}
	}

	//檢驗找到的是否真是眾數
	count =0;                      
	for(i = 0;i < len; ++i)
	{
		if(candidate == num[i])
			count++;
	}
	if(count > len/2)
		return true;
	else
		return false;
}