多数元素

· 约 1 分钟阅读 · 次阅读 leetcode

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

 

示例 1:

输入:[3,2,3] 输出:3 示例 2:

输入:[2,2,1,1,1,2,2] 输出:2


哈希表法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        counter = dict()
        for e in nums:
            if e in counter:
                counter[e] += 1
            else:
                counter[e] = 1
            if counter[e] > len(nums)//2:
                return e
        return -1

排序法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums.sort()
        return nums[len(nums)//2]

摩尔投票法

有点神奇!

如果数字相同就+1,不同就-1

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        ans = None
        count = 0
        for num in nums:
            if count == 0:
                ans = num
            if ans == num:
                count += 1
            else:
                count = count - 1
        return ans

分治

随机化