面试题 17.10. 主要元素

43 阅读1分钟

题目:
数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。

来源:力扣(LeetCode) 链接:leetcode.cn/problems/fi… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
算法:
要考虑三个数的元素个数分别为n,n,1,最后抵消后,保留的为个数为1的数的情况

func majorityElement(nums []int) int {
    num := nums[0]
    count := 1
    for i := 1; i < len(nums); i ++ {
        if count == 0 {
            num = nums[i]
            count ++
            continue
        }
        if num == nums[i] {
            count ++
        } else {
            count --
        }
        
    }
    if count <= 0 {
        return -1
    }
    numCount := 0
    for i := range nums {
        if nums[i] == num {
            numCount ++
        }
    }

    if numCount >= (len(nums) + 1) / 2 {
        return num
    }
    return -1
}