【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}, 由于数组中数字2出现了5次,超过数组的长度的一半,因此输出2
一种办法是先把数组排序,那么超过一半的元素一定是数组最中间的元素。
第二种办法比较抽象,设一个变量保存当前值,设一个次数,当前值与下一个值进行比较,如果相等,次数加一,如果不相等,次数减一,如果次数减到0了还是不相等,就把当前值替换掉。代码如下:
#include <stdio.h> #include <assert.h> int find_half(int *arr, int len) { int count = 0; int cur = 0; int i = 0; assert(arr != NULL); for (; i < len; ++i) { if (count == 0) { cur = arr[i]; count = 1; } else if (arr[i] == cur) count++; else count--; } return cur; } int main() { int arr[] = { 1, 2, 2, 2, 3, 2, 6, 2, 7, 2 }; int len = sizeof(arr) / sizeof(arr[0]); printf("%d ", find_half(arr, len)); return 0; }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: 【c语言】输入3个数,要求按从小到大顺序输出