码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-01-12 01:32:04      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:count   space   长度   它的   cout   记录   sizeof   ret   tool   

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



思路:首先看到这个题目,数组中一个数字出现的次数超过数组长度的一半,也就意味着这个数字出现的次数比数组中其它数字出现次数的总和还多。我们在遍历的数组的时候可以用两个值来记录,一个是数组出现的次数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;
}


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

标签:count   space   长度   它的   cout   记录   sizeof   ret   tool   

原文地址:http://blog.51cto.com/12951882/2060052

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!