//思路:
//Boyer-Moore Majority Vote Algorithm (摩尔投票算法)
// 在线性时间 O(n) 和空间复杂度的情况下,在一个元素序列中查找最多的元素。
// 算法在局部变量中定义一个序列元素(m)和一个计数器(cnt),初始化的情况下计数器为0。
// 依次扫描序列中的元素,当处理元素 x 的时候:
// 如果计数器为 0,那么将 x 赋值给 m,然后将计数器(cnt) 设置为1;
// 如果计数器不为 0,那么将序列元素 m 和 x 比较,如果相等,那么计数器加 1,
// 如果不等,那么计数器减 1。
// 处理之后,最后存储的序列元素(m),就是这个序列中最多的元素。
public int MoreThanHalfNum_Solution(int [] array) {
int cnt=0;
int majority = array[0];
for(int num : array){
if(cnt==0){
majority = num;
cnt=1;
}else if(majority==num){
cnt++;
}else{
cnt--;
}
}
cnt=0;
for(int num:array){
if(num==majority){
cnt++;
}
}
return (cnt>array.length/2)?majority:0;
}
https://www.mianshi.online,https://www.i9code.cn
本文由博客一文多发平台 OpenWrite 发布!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。