//查找数组中出现次数超过一半的数。
int Find_Times_Is_Half(int arr[] , int N)
{
int times = 0;int candidate;
for (int i = 0; i < N; i++)
{
if(times == 0)
{
candidate = arr[i];
times = 1;
}
else if(candidate == arr[i])
times ++;
else
times --;
}
return candidate;
}
//这种方法也可以求超过一半的出现次数的数(本身就是从求超过一半衍生过来的)。只需将下面times和candidate初始化的时候全部初始化为0;
//只需虚幻的给数组头加上一个arr[0]。
int Find_Times_Is_Half(int arr[] , int N)
{
int times = 1;int candidate = arr[0];
for (int i = 0; i < N; i++)
{
if(times == 0)
{
candidate = arr[i];
times = 1;
}
else if(candidate == arr[i])
times ++;
else
times --;
}
return candidate;
}
void main_of_FindTimesIsHalf()
{
int arr1[4] = {0 , 1 , 2 , 1};
printf_s("%d\n" , Find_Times_Is_Half(arr1 , 4));
int arr2[4] = {1 , 1 , 2 , 0};
printf_s("%d\n" , Find_Times_Is_Half(arr2 , 4));
int arr3[6] = {1 , 0 , 2 , 1 , 2 , 1};
printf_s("%d\n" , Find_Times_Is_Half(arr3 , 6));
}
“找贴吧水王”-----找数组中出现次数超过数组一半的数或者正好为一半的数
最新推荐文章于 2014-12-18 09:43:56 发布