C语言—求出现次数超过数组长度一半的数
题目://求数组中元素出现次数超过数组长度一半的数字。
思路://1.先排序,再输出,数组中间的那个数(arr[n/2]),这种办法对于有偶数个元素的数组可能会出现错误;
2.遍历整个数组,将遍历到的相同的数的次数加起来,最后返回,次数多的数,这个数就是出现次数超过数组长度一半的数。(本次所用的就是这种方法)
#include<stdio.h> #include<Windows.h> int Find(int *arr, int len){ int num = 0; int times = 0; int i = 0; for (i = 0; i < len; i++){ if (times == 0){ num = arr[i]; //先给num一个值,记录次数为1 times = 1; } else if (arr[i] == num){ //在遍历的时候,有相同的则次数加1 times++; } else{ times--; //不同的则次数减1,超过数组长度一半的数,times肯定大于0 } } return num; } int main(){ int arr[] = { 1, 2, 3, 2, 2, 2, 5, 4, 2 }; printf("超过一半的数是: %d\n", Find(arr, sizeof(arr) / sizeof(arr[0]))); system("pause"); return 0; }运行结果:
