您的位置:首页 > 编程语言 > C语言/C++

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

2017-06-29 17:00 806 查看
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

比如输入一个长度为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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐