我知道可以用divide and conquer算法...但是我不会实现= =
就直接排序然后数个数了
其实排序之后第n/2个元素就是了不用数来着。。。
public int majorityElement(int[] num) {
Arrays.sort(num);
int count = 1;
int majority = num.length / 2;
int element = -1;
for (int i = 0; i < num.length; i ++) {
element = num[i];
while (i + 1 < num.length && num[i] == num[i+1]) {
System.out.println(i + ":" + num[i]);
count ++;
i ++;
}
if (count > majority) {
break;
}
else {
count = 1;
}
}
return element;
}
原来解题方法有很多种。。
比如
Hashtable:我还不会用hashtable= =
Random:随机一个数,得到众数的概率大于1/2
Moore Voting algorithm:maintain 一个candidate和count,最后的candidate是众数