面试题-查找一个数组是否存在数目大于一半的数

原创 2013年12月02日 18:22:32

在此,我考虑两个思路:

第一个就是naive的,直接统计就是,扫一遍计数hash_map。不多说

第二个就是先排序,然后找到中位数,只要存在这样的数,那么就是该中位数。统计该数的值就行

void quicksort(int a[], int begin, int end)
{
	if(begin>=end)
		return;
	int pivot = a[begin];
	int b = begin, e = end;
	int mid = 0;

	while(begin < end)
	{
		while(a[end] >= pivot && end > begin)
			--end;
		a[begin] = a[end];
		while(a[begin] <= pivot && begin < end)
			++begin;
		a[end] = a[begin];
	}
	mid = begin;
	a[mid] = pivot;
	quicksort(a, b, mid-1);
	quicksort(a, mid+1,e);
}

int getMoreThanHalfNumber(int a[], int len)
{
	quicksort(a, 0, len-1);
	int median = a[len/2];
	int count = 0;
	for(int i=0; i<len; i++)
	{
		if(median == a[i])
			count++;
	}
	if(count > len/2)
		return median;
	return -1;
}


如果只是找出数组中出现次数超过一半的数,则

int getMoreThanHalfNumberture(int a[], int len)
{
	int count = 1; 
	int halfNumber = a[0];

	for(int i=1; i<len; i++)
	{    
		if(a[i] == halfNumber)
			++count;
		else
			--count;
		if(count==0)
		{
			halfNumber = a[i];
			count = 1;
		}
	}
	return halfNumber;
}





相关文章推荐

整型数组处理算法(十)给定数组a[n],其中有超过一半的数为一个定值,找出这个数。[2014人人网笔试题]

给定数组a[n],其中有超过一半的数为一个定值,找出这个数。[2014人人网笔试题]...

@陈利人 : #面试题#给定两个数组X和Y,元素都是正数。请找出满足如下条件的数对的数目: x^y > y^x,即x的y次方>y的x次方;x来自X数组,y来自Y数组

数对数目分析 原题 给定两个数组X和Y,元素都是正数。请找出满足如下条件的数对的数目: x^y > y^x,即x的y次方>y的x次方 x来自X数组,y来自Y数组 分析 假设数组X的...

剑指offer面试题[29]-数组中出现次数超过一半的数字

题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2...

程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]

题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都曾经采用过这个题目。要几十分钟的时间里很好地解答这道题...

面试题29_数组中出现次数超过一半的数字

题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2...

面试题29 数组中超过一半的数字

题目: 数组中有一个数字的出现次数超过了数组的一半,请找出这个数字,例如输入一个长度为8的数组{1,3,7,7,7,7,7,5},由于7出现了5次,所以输出7. 输入: {1,3,7...

程序员面试题精选100题(47)-数组中出现次数超过一半的数字

http://zhedahht.blog.163.com/blog/static/25411174201085114733349/ 题目:数组中有一个数字出现的次数超过了数组长度的一半,找出...
  • ZCSYLJ
  • ZCSYLJ
  • 2011年09月29日 23:46
  • 711

剑指offer-面试题29-数组中出现次数超过一半的数字

题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9 的数组{ 1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5 次,超过数组长...

剑指offer-----面试题29(数组中出现次数超过一半的数字)

实现思路:首先如果数组中存在出现次数超过一半的数字的话,那么这个数字肯定会位于数组排序之后中间元素的右边,但是对数组排序的话,时间复杂度是O(nlogn),这道题并没有非要求我们对数组进行排序,我们只...

剑指offer 面试题29—数组中出现次数超过一半的数字

题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面试题-查找一个数组是否存在数目大于一半的数
举报原因:
原因补充:

(最多只允许输入30个字)