1. 程式人生 > >資料結構面試題總結2——陣列:求出現次數超過一半的元素

資料結構面試題總結2——陣列:求出現次數超過一半的元素

遇到這個題最簡單的想法就是,統計每個元素出現的次數。但是無法知道陣列中有多少種元素,並且這樣會用到其他的儲存空間,再查詢結果的時候也需要多遍歷一次結果的陣列。

正確的解決辦法是去記錄重複元素(不管是否是結果元素)的數量,然後碰見一個不同元素就減一(相當於抵消了),碰見結果元素也是一樣的。

思考一下,結果元素會超出一半,所以當所有不同元素被抵消完肯定還會剩下結果元素。

這種方法只遍歷一次陣列。

int FindNum(int *a, int n)
{
	int result = a[0];
	int result_count = 1;
	for (int i = 1; i < n; i++)
	{
		if (a[i]==result)
		{
			result_count++;
		} 
		else
		{
			result_count--;
			if (result_count==0)
			{
				result = a[i];
				result_count = 1;
			}
		}
	}
	return result;
}