您的位置:首页 > 其它

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

2017-07-23 12:23 344 查看
解法一:一个数字出现的次数超过数组大小的一半,那么如果这是一个有序的数组,这个数字必定在数组中间的位置。

解法二:一个数字出现的次数超过数组大小的一半,也就是说,该数字出现的次数比其他数字出现次数的和还要多。那么,我们可以在遍历数组时设置两个变量result,times;result记录数组中的数字,times记录次数。当我们遍历下一个数字时,如果该数字与之前保存至result中的数字相同,则times++,反之times- -;如果times为0,则保存下一个数字至result,times置1。而我们要找的数字肯定是最后一次设置为result的数字。

具体代码看下面:

#include<iostream>
using namespace std;
int MoreThanHalfNum(int *arr, int size)
{
if (arr == NULL || size <= 0)
return 0;
int result = arr[0];
int times = 1;
for (int i = 1; i < size; i++)
{
if (times == 0)
{
result = arr[i];
times = 1;
}
else if (arr[i] != result)
times--;
else
times++;
}
return result;
}
int main()
{
int arr[12] = { 2, 3, 2, 2, 2, 2, 2, 5, 4, 1, 2, 3 };
cout << MoreThanHalfNum(arr, 12) << endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐