【发布时间】:2023-02-02 14:08:26
【问题描述】:
查找在数组中出现超过 N/3 次的数字。不是N/2次?先看问题。
不使用摩尔算法。
【问题讨论】:
-
Boyer-Moore 算法。
-
多数元素或元素至少出现 N/2 次 ?
标签: hash
查找在数组中出现超过 N/3 次的数字。不是N/2次?先看问题。
不使用摩尔算法。
【问题讨论】:
标签: hash
您将需要考虑最大值(最坏的情况是什么)。 除非你没有检查数组中的所有元素,否则 2 可以竞争到最后。
假设您有以下数组:
[1,2,3,1,2,2,1,2]
基于此示例,您可以看到您需要遍历所有元素一次:O(n)
【讨论】:
int majorityElement(int a[], int size){
// your code here
//Moore Voting Algorithm
//Finding the candidate element
int count = 1, res = 0;
for(int i=1;i<size;i++){
if(a[i]==a[res]) count++;
else count--;
if(count==0){
res = i;
count = 1;
}
}
//Checking
count = 0;
for(int i=0;i<size;i++){
if(a[i]==a[res]) count++;
}
return count>size/2? a[res]: -1;
}
【讨论】: