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

原理:设一个变量保存当前值。设一个次数,当前值与下一个值进行比較。假设相等,次数加一,假设不相等。次数减一。假设次数减到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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值