leetcode 169

来源:互联网 发布:升级ios10网络连不上 编辑:程序博客网 时间:2024/04/30 17:52

题目:数组里有一个元素出现的次数在(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)。

0 0
原创粉丝点击