求数组中出现次数大于一半的数字

xiaoxiao2021-02-28  38

思路: 是要找的元素,计数器加一,不是则减一,当计数器为0,说明相同的元素个数已经被不同元素个数抵消完,则换下一个元素,最后剩下的就是最多的那个数字

相当于不断从数组里删除不同的两个数(不管包不包含要找的过半数),到最后剩下的将全是相同的数字了,即要找的数字

#include<stdio.h> int main(void) { int arr[]={1,1,1,1,1,8,2,2,2}; int n=sizeof(arr)/sizeof(int); int i,j; int a=0,b=0;//a用来记录数组中的数字,b记录该数字出现的次数 for(i=0;i<n;i++) { if(arr[i]==a) //①当前数组元素与a相等,先假设要找的数就是数组当前元素,把它存在a中。给b加一 { a=arr[i]; b++; } else// ②当前数组元素与a不相等 。分两种情况 { if(b>0) b--; //第一种:b大于0,给b减一 if(b==0) //第二种:b=0,说明前面不同的数的个数已经把相同的元素的个数抵消完了,则换下一个元素 { a=arr[i]; b=1; } } } printf("%d \n",a); }
转载请注明原文地址: https://www.6miu.com/read-2620235.html

最新回复(0)