其他分享
首页 > 其他分享> > 面试题 17.10. 主要元素

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

标签:count,面试题,return,nums,int,元素,major,17.10,length
来源: https://blog.csdn.net/abcdef314159/article/details/120281369