【c語言】數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字


題目:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。

比如輸入一個長度為9的數組{1,2。3。2,2。2。5,4。2}, 因為數組中數字2出現了5次,超過數組的長度的一半,因此輸出2



一種辦法是先把數組排序。那么超過一半的元素一定是數組最中間的元素。


另外一種辦法比較抽象。設一個變量保存當前值。設一個次數,當前值與下一個值進行比較。假設相等,次數加一,假設不相等。次數減一。假設次數減到0了還是不相等,就把當前值替換掉。

代碼例如以下:



#include <stdio.h>
#include <assert.h>

int find_half(int *arr, int len)
{
	int count = 0;
	int cur = 0;
	int i = 0;
	assert(arr != NULL);
	for (; i < len; ++i)
	{
		if (count == 0)
		{
			cur = arr[i];
			count = 1;
		}
		else if (arr[i] == cur)
			count++;
		else
			count--;
	}
	return cur;
}

int main()
{
	int arr[] = { 1, 2, 2, 2, 3, 2, 6, 2, 7, 2 };
	int len = sizeof(arr) / sizeof(arr[0]);
	printf("%d\n", find_half(arr, len));
	return 0;
}








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM