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

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

时间:2015-07-08 13:04:44      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

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





技术分享



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

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

标签:

原文地址:http://blog.csdn.net/zhaoyaqian552/article/details/46799483

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