题目:数组里有一个元素出现的次数在(n/2+1)以上,找到这个元素.
解法1:
暴力法,从头开始计算每个元素出现的次数,然后找到出现次数满足要求的元素并且返回,但是本人在提交代码的时候发现。。。Time limit out,也就是算法时间复杂度太大,解决不了规模太大的问题。于是看了discussion里大神们的答案,然后发现了下面这个解法。
解法2:
int majorityElement(int num[], int n) {
int i = 0;
int result = 0;
int count = 0;
for (;i < n; ++i) {
if (count == 0 || result == num[i]) {
result = num[i];
count++;
} else {
count--;
}
}
return result;
}
这个作者还提供了这个算法的来源。叫做boyer-moore vote算法,专门解决这个算法的。代码很简单,能看懂,但是恐怕很难想到这个算法。记录下来当做补充一下知识吧(算法确实很brilliant)。