【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;
}







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

如题,《剑指offer》 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的...
  • nhgfd
  • nhgfd
  • 2017年03月10日 14:57
  • 497

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

package test; public class Test3 { static int solve(int[] arr,int len){ int index = -1; ...
  • kangaroo835127729
  • kangaroo835127729
  • 2015年03月11日 23:31
  • 805

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

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

iOS应用开发应遵循的10条设计原则

大家知道,苹果App Store的应用审查十分严格,可以说近乎吹毛求疵。如何才能确保自己的应用通过苹果的审查,顺利在App Store上架?以下是BI为广大开发者总结出来的10条设计原则:   ...
  • leiphone
  • leiphone
  • 2011年12月26日 12:10
  • 455

【C语言】统计数组中出现次数超过一半的数字

//统计数组中出现次数超过一半的数字 #include int Find(int *arr, int len) { int num = 0; //当前数字 int times ...
  • doudouwa1234
  • doudouwa1234
  • 2015年07月07日 15:15
  • 798

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

算法描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字 算法实现: /*******************************************************...
  • yiluohan0307
  • yiluohan0307
  • 2016年04月27日 08:54
  • 207

java 找到数组中出现次数超过数组长度一半的那个数字

/** * 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 * 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。 * 由于数字2在数组中...
  • moyinghui
  • moyinghui
  • 2016年12月20日 18:05
  • 716

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

这个方法借用了别人的思路。      在这里我做一下简单的分析。      这个算法的时间复杂度是O(n),另外用了两个辅助变量。      k用于临时存储数组中的数据,j用于存储某个数出现的次...
  • iefswang
  • iefswang
  • 2012年05月18日 21:38
  • 2348

剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

腾讯 2015秋招 编程题4:微信红包中个数超过总数一半的红包金额 题目描述 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一...
  • yanglr2010
  • yanglr2010
  • 2016年05月14日 22:24
  • 1208

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

数组中出现次数超过一半的数字 来自剑指offer,其中两种方法思想都很好,感谢作者。 #include using namespace std; /* 两种思想:第一种想到统计上的中位...
  • huruzun
  • huruzun
  • 2014年03月30日 11:34
  • 3616
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
举报原因:
原因补充:

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