169. 求众数-leetcode 摩尔投票算法

提问: 给定一个int型数组,找出该数组中出现次数大于数组长度一半的int值。

解决方案: 遍历该数组,统计每个int值出现次数,再遍历该数组,找出出现次数大于数组长度一半的int值。

两种线性解法:
一种是放入一个哈希表中,然后同数加一,
还有一种就是遍历数组,然后发现相同就给maj加一,如果不同就减一,到0就把结果换成变成0的数,最后得到的数就是答案。

class Solution {
   func majorityElement(_ nums: [Int]) -> Int {
        var maj = 0
        var num = nums[0]
        for n in nums {
            if num == n {
               maj = maj + 1
            } else {
                if maj > 0 {
                    maj = maj - 1
                } else {
                    num = n
                }
            }
        }
        return num
    }
}

你可能感兴趣的:(169. 求众数-leetcode 摩尔投票算法)