C语言:求数组中元素出现次数超过数组长度一半的数

原理:设一个变量保存当前值。设一个次数,当前值与下一个值进行比較。假设相等,次数加一,假设不相等。次数减一。假设次数减到0了还是不相等,就把当前值替换掉。

#include 
#include 
#include 
#include 
#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;
} 

你可能感兴趣的:(C语言:求数组中元素出现次数超过数组长度一半的数)