您的位置:首页 > 其它

LeetCode - Majority Element

2015-03-25 04:50 302 查看
https://leetcode.com/problems/majority-element/

这道题虽然是easy难度的,但还挺多解法,挺有意思的。我最开始想到的是hash table解法,很简单,代码就不写了。

另外,因为众数一定存在,所以由于有一个candidate解法,即把当前遇到的数视为candidate,如果碰到不是candidate的数,则candidate count减1,如果是candidate,则candidate count加1,如果count为0,则更新candidate至下一个数。方法如下:

public int majorityElement(int[] num){
int candidate = 0;
int count = 0;
for(int i=0; i<num.length; i++){
if(count==0){
candidate = num[i];
count++;
}
else if(num[i]==candidate) count++;
else count--;
}
return candidate;
}


另外,还有bit manipulation的解法如下,即统计整数32位中,每位是1的次数,如果是1的次数大于 num.length/2, 说明众数这一位肯定是1:

public int majorityElement(int[] num) {
int[] bitcount = new int[32];
for(int i=0; i<num.length; i++){
for(int j=0; j<32; j++){
if((num[i] & (1<<j)) != 0) bitcount[j]++;
}
}
int rst = 0;
for(int i=0; i<32; i++){
if(bitcount[i]>(num.length/2)){
rst += Math.pow(2, i);
}
}
return rst;
}


但这个解法,过不了整数最大和最小值,不知道为啥。。。。。。。

另外还有divide and conquer, random selection的解法,描述见:

/article/7088903.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: