用C语言,不用摩尔投票,不用哈希表, 写n个数里出现次数大于等于n/2的数
时间: 2024-02-12 14:08:32 浏览: 77
C语言算法,无需积分
3星 · 编辑精心推荐
可以使用 Boyer-Moore 投票算法来解决这个问题。该算法的基本思想是,维护一个候选众数和一个计数器,初始时候候选众数为第一个数,计数器为1,遍历数组,如果当前数等于候选众数,则计数器加1,否则计数器减1,如果计数器为0,则将当前数设为候选众数,计数器重新设为1,最终候选众数就是数组中出现次数大于等于n/2的数。
以下是 C 语言的实现代码:
```
int majorityElement(int* nums, int numsSize) {
int cnt = 1, candidate = nums[0];
for (int i = 1; i < numsSize; i++) {
if (nums[i] == candidate) {
cnt++;
} else {
cnt--;
if (cnt == 0) {
candidate = nums[i];
cnt = 1;
}
}
}
return candidate;
}
```
这段代码的时间复杂度为 O(n),空间复杂度为 O(1)。
阅读全文