面试题 17.10. 主要元素

截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666

面试题 17.10. 主要元素
面试题 17.10. 主要元素

public int majorityElement(int[] nums) {
    //边界条件判断,如果数组为空就返回-1
    if (nums == null || nums.length == 0)
        return -1;
    //先找出主要元素
    int major = nums[0];
    int count = 1;
    for (int i = 1; i < nums.length; i++) {
        if (major == nums[i]) {
            //如果当前元素等于major,count就加1
            count++;
        } else {
            //否则count就减1,
            count--;
            if (count < 0) {
                //如果count小于0,说明前面的
                //全部抵消了,这里在重新赋值
                major = nums[i];
                count = 1;
            }
        }
    }
    //下面是判断主要元素是否存在
    count = 0;
    int half = nums.length >> 1;
    for (int num : nums) {
        if (major == num)
            if (++count > half)
                return major;
    }
    return -1;
}

时间复杂度O(N),两个for循环,不是嵌套的。
空间复杂度O(1),使用了两个变量。

上一篇:「不会」「淼」求菲波那契第n项


下一篇:standard_key.kmp