关闭

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

345人阅读 评论(0) 收藏 举报

在此,我考虑两个思路:

第一个就是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;
}





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6450次
    • 积分:147
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:4篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论