【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字

原创 2015年07月08日 09:58:56

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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;
}







版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数组中有一个数字出现的次数超过了数组长度的一半,找出这个数

这个方法借用了别人的思路。      在这里我做一下简单的分析。      这个算法的时间复杂度是O(n),另外用了两个辅助变量。      k用于临时存储数组中的数据,j用...

面试:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数

/*********************************************************************** 有个数字出现的次数超过了数组长度的一半,也就是, 有个...

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

分析:从数组中取出两个数pk,如果不相同,两个数都去掉,如果相同,再找下一个数pk,最后剩下的数就是目标数,程序如下: #include #include bool FindNumberOv...

php算法:找出数组中出现次数超过数组长度一半的数字

<?php /* * 算法要求:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 * * 算法分析:我们需要计算数组中每个数字的出现次数。在PHP中我们可以使用in_array函数 * ...

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

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

找出数组中出现的次数超过数组长度的一半

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

找出数组中出现次数超过数组长度一半的元素

数组中出现次数超过一半的数字 来自剑指offer,其中两种方法思想都很好,感谢作者。 #include using namespace std; /* 两种思想:第一种想到统计上的中位...

Java实现 找出数组中出现次数超过数组长度一半的元素

简述 : 给定一个数组,找出数组中元素出现次数超过数组长度一半的元素 如数组: [4, 3, 2, 1, 1, 1, 1, 1, 1, 0 ] 其中超过一半的元素就是 1 两种实...
  • anialy
  • anialy
  • 2012-10-16 01:34
  • 3612

面试题29:找出数组中出现次数超过一半的数字-基于partition函数以及分摊法

#include using namespace std; int partition( int a[], int low, int high ) { if( low >= high ) ...

17_7_22 一个数组中有一个数字的次数超过了数组的一半,求出这个字符。

题目描述: 一个数组中有一个数字的次数超过了数组的一半,求出这个字符。如:int a[]={2,3,2,2,2,2,2,5,4,1,2,3},求出超过一半的数字是2。难点分析: 如果,通过O(N)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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