给一个长度为n的数组,数组中有一个数字出现的次数超过数组长度的一半,请我出这个数字、用c语言实现
时间: 2024-10-11 07:06:09 浏览: 42
PHP实现找出数组中出现次数超过数组长度一半的数字算法示例
在C语言中,找出一个数组中出现次数超过数组长度一半的元素(假设数组中所有元素都是非负整数),可以使用哈希表(或称为关联数组,也称作字典)来记录每个元素的出现次数。以下是利用哈希表的解决方案:
```c
#include <stdio.h>
#include <stdbool.h>
#define SIZE 1000 // 假设数组最大长度
typedef struct {
int value;
int count;
} Pair;
// 使用哈希表存储元素及其计数
Pair pairs[SIZE];
bool found = false;
void findMajorityElement(int arr[], int n) {
for (int i = 0; i < n; ++i) {
if (!pairs[arr[i]].count) {
pairs[arr[i]].value = arr[i];
pairs[arr[i]].count = 1;
} else {
pairs[arr[i]].count++;
}
// 当发现一个元素的计数超过n/2时,停止循环
if (pairs[arr[i]].count > n / 2) {
found = true;
break;
}
}
}
int getMajorityElement() {
return pairs[found ? pairs[value].value : -1].value;
}
int main() {
int arr[] = {1, 2, 2, 3, 2, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
findMajorityElement(arr, n);
if (found) {
printf("数组中出现次数超过一半的数字是 %d\n", getMajorityElement());
} else {
printf("没有找到满足条件的数字。\n");
}
return 0;
}
```
在这个程序中,我们遍历数组,对每个元素计数。当遇到一个未记录过的元素,就将其添加到哈希表中;如果已经存在,则增加其计数。一旦某个元素的计数达到或超过数组长度的一半,我们就找到了多数元素,并返回该元素。如果没有找到这样的元素,说明数组中不存在出现次数超过一半的元素。
阅读全文