面试题 17.10. 主要元素

Posted 数据结构和算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 17.10. 主要元素相关的知识,希望对你有一定的参考价值。

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


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),使用了两个变量。

以上是关于面试题 17.10. 主要元素的主要内容,如果未能解决你的问题,请参考以下文章

面试题 17.10. 主要元素投票算法 C++

LeetCode面试题 17.10. 主要元素/最优二叉树II(树形DP)/NC73数组中出现次数超过一半的数字/229. 求众数 II/NC134股票(无限次交易)/NC114旋转字符串

前端面试题之手写promise

前端面试题-

面试题

LeetCode 面试题 17.10 主要元素[摩尔投票法] HERODING的LeetCode之路