原理:设一个变量保存当前值。设一个次数,当前值与下一个值进行比較。假设相等,次数加一,假设不相等。次数减一。假设次数减到0了还是不相等,就把当前值替换掉。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#pragma warning (disable:4996)
int find_half(int *arr, int len)
{
int tmp;
int count=0;
for (int i = 0; i < len; i++)//对数组进行遍历
{
if (count == 0) //如果count=0,则此时的a[i]赋值给tmp,出现次数加一
{
tmp = arr[i]; //次数减到0,此时tmp重新赋值
count++;
}
if (arr[i]==tmp)//需要一个变量保存这个出现的值,与下次遍历的数进行对比
{
count++; //相同则++
}
else
{
count--; //不同则--
}
}
return tmp;//出现次数最多的到最后count值不为0,不会再重新赋值,所以最后的值就是我们要找的那个出现次数最多的数
}
int main()
{
int arr[] = { 1,2,3,2,2,2,5,4,2 };
int len = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", find_half(arr, len));
return 0;
}