解题思路-leetcode第229题:求众数Ⅱ
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。
示例 1:
输入:[3,2,3]
输出:[3]
示例 2:
输入:nums = [1]
输出:[1]
示例 3:
输入:[1,1,1,3,3,2,2,2]
输出:[1,2]
提示:
1 <= nums.length <= 5 * 104
-109 <= nums[i] <= 109
解题思路:本题采用哈希表的思想解题,利用字典记录每一个元素出现的字数。首先建立字典,然后遍历输入列表,若当前元素已经在列表中,则将对应value加1,若未出现,则添加进去,value初值设为1。遍历完成后得到哈希字典。然后遍历字典,将value值大于 ⌊ n/3 ⌋的key添加进存储结果的列表中,最后返回结果列表。代码如下:
class Solution:
def majorityElement(self, nums: List[int]) -> List[int]:
dic = {}
res = []
for i in nums:
if i in dic:
dic[i] += 1
else:
dic[i] = 1
t = len(nums) // 3
for key in dic.keys():
if dic[key] > t:
res.append(key)
return res
提交后,通过。