Majority Element

来源:互联网 发布:淘宝店铺地址哪里看 编辑:程序博客网 时间:2024/06/07 12:14

一看到要计数的,首先想到了hash表。不过本人的hash表很简单,就是一个数组而已,hash函数也仅仅是取余数这么简单,但明显是扩展不能的(如果int数组的数值都很大,那么size要爆)。后来用例的一个-1直接完爆本人的取余哈希表。。。个人觉得一道easy题还要写二次探测的hash表是不合格的hash。。。

于是翻看解答,一个叫Moore voting algorithm的算法很简单有效,不过该算法应该只适用于target出现次数一定大于n/2的数组,如果出现次数不足那么算法失效,所以觉得还是不够普适。穆勒算法维护一个count和一个候选者,顺序遍历,如果遇到相同的则count++,不同count--,当count = 0时下一个num就是候选者。因为出现次数一定大于n/2,根据抽屉原则一定有至少2个target是相邻的,因此一定能得出结果。

如下:

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


0 0
原创粉丝点击