数组中出现次数超过一半的数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组中出现次数超过一半的数字相关的知识,希望对你有一定的参考价值。

题:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。



思路:首先看到这个题目,数组中一个数字出现的次数超过数组长度的一半,也就意味着这个数字出现的次数比数组中其它数字出现次数的总和还多。我们在遍历的数组的时候可以用两个值来记录,一个是数组出现的次数count,一个用来保存它的结果result,我们把数组的第一个数arr[0]作为结果保存跟下一个数字比较,count记为1,如果下一个数字跟之前保存的数字相同count+1,如果跟之前保存的数字不同,则count-1。如果次数为0,我们需要保存它的下一个数字,并且将次数设为1。因为要找的数字出现的次数超过数组长度长度的一半,所以最后一次设为1的数字就是我们要找的数字。

代码:

#include <iostream>
using namespace std;
int Serach(int arr[],int len)
{
	int count=1;
	int result=arr[0];
	for(int i=1;i<len;i++)
	{
		if(count==0)
		{
			result=arr[i];
			count=1;
		}
		else if(result == arr[i])
			count++;
		else
			count--;
	}
	return result;
}

int main()
{
	int arr[]={1,2,3,2,2,2,5,4,2};
	int sz=sizeof(arr)/sizeof(arr[0]);
	int ret=Serach(arr,sz);
	cout<<ret<<endl;
	return 0;
}


以上是关于数组中出现次数超过一半的数字的主要内容,如果未能解决你的问题,请参考以下文章

Java 剑指offer(39) 数组中出现次数超过一半的数字

剑指 Offer 39. 数组中出现次数超过一半的数字 的 详细题解

数组中出现次数超过一半的数字(C语言+Java)

剑指 Offer 39. 数组中出现次数超过一半的数字

出现次数超过一半的数字

数组中出现次数超过一半的数