一个数组中有一个数字的次数超过了数组的一半,求出这个字符。如:int a[]={2,3,2,2,2,2,2,5,4,1,2,3},求出超过一半的数字是2
#include<iostream>
using namespace std;
bool _CheckArray(int* data, int length)
{
if ((data == NULL) && (length <= 0))
return true;
else
return false;
}
bool _CheckNum(int data[], int length, int num)
{
int count = 0;
for (int i = 0; i < length; i++)
{
if (num == data[i])
count++;
}
if (count >= (length / 2))
return true;
return false;
}
int MoreThanHalfNum(int* data, int length)
{
if (_CheckArray(data, length))
return 0;
int count = 1;
int num = data[0];
for (int i = 1; i < length; i++)
{
if (count == 0)
{
num = data[i];
count = 1;
}
else if (num == data[i])
count++;
else
count--;
}
if (_CheckNum(data, length, num))
return num;
return 0;
}
int main()
{
int data[] = { 1, 2, 2, 2, 3, 2, 4, 5, 2, 2 };
int length = sizeof(data) / sizeof(data[0]);
cout << MoreThanHalfNum(data,length ) << endl;
return 0;
}