C语言编程给定一个数组,找出一个出现次数大于n/2的数
时间: 2023-12-10 11:41:30 浏览: 106
给定一个整数数组,其中元素的取值范围为0到10000,求其中出现次数最多的数
5星 · 资源好评率100%
可以使用摩尔投票算法(Moore Voting Algorithm)来解决这个问题,时间复杂度为 O(n)。
算法思想如下:
1. 假设数组中第一个数出现次数为 1,将其设为候选数。
2. 从数组的第二个数开始遍历,如果当前数等于候选数,则将计数器加一,否则将计数器减一。
3. 如果计数器为 0,则将当前数设为候选数。
4. 最终留下的候选数即为出现次数大于 n/2 的数。
下面是 C 语言实现代码:
```c
int find_majority(int* nums, int nums_size) {
int candidate = nums[0];
int count = 1;
for (int i = 1; i < nums_size; i++) {
if (nums[i] == candidate) {
count++;
} else {
count--;
if (count == 0) {
candidate = nums[i];
count = 1;
}
}
}
return candidate;
}
```
该函数接收一个整型数组和数组长度作为参数,返回出现次数大于 n/2 的数。
阅读全文