Majority Element

来源:互联网 发布:藏民对十一世班禅 知乎 编辑:程序博客网 时间:2024/05/01 04:21

好题,利用一个voting algorithm , O(N)时间+O(1)内存就可以做出来了。或者Arrays.sort(num) 然后 num[ num.length / 2 ] 就是那个元素了,因为数量多过n / 2嘛,哈哈,这样时间复杂度是O(NlogN),不需要额外内存空间。

按理来说这道题可以推广到第K多的element,就比较复杂了。。可能需要先排序,再对每一个初次遇到的元素建counter,再找第K大的counter,O(NlogN + N)=O(NlogN)

public int majorityElement(int[] num) {        if(num == null) return 0;        int res = num[0];        int cnt = 1;        int i = 1;        while( i < num.length){            if(res != num[i++]) cnt--;            else cnt++;            if(cnt == 0) {                cnt++;                res = num[--i];                i++;            }                    }        return res;    }


0 0
原创粉丝点击