169. 求众数

mac2024-04-09  28

题目: 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在众数。

我自己是用的字典,写这题是因为看到LeetCode的题解,觉得很巧妙: ① 排序

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

② Boyer-Moore 投票算法

class Solution: def majorityElement(self, nums): count = 0 candidate = None for num in nums: if count == 0: candidate = num count += (1 if num == candidate else -1) return candidate 作者:LeetCode 链接:https://leetcode-cn.com/problems/majority-element/solution/qiu-zhong-shu-by-leetcode-2/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

③ 分治 求左半边的众数和右半边的众数,最终的众数必为二者之一

我自己的代码:

from typing import List class Solution: def majorityElement(self, nums: List[int]) -> int: if len(nums) == 1: return nums[0] dic = {} n = len(nums) // 2 for num in nums: if num not in dic: dic[num] = 1 else: dic[num] += 1 if dic[num] > n: return num
最新回复(0)