剑指Offer 39. 数组中出现次数超过一半的数字(Easy)

tech2022-07-30  161

剑指Offer 39. 数组中出现次数超过一半的数字(Easy)

【题目链接】

题解

投票法python题解–sort()、快排、字典、抵消等四种方法

思路

方法一:哈希表(字典)

class Solution(object): def majorityElement(self, nums): if len(nums) == 1: return nums[0] d = {} for num in nums: if num in d: d[num] += 1 if d[num] > len(nums) // 2: return num else: d[num] = 1

方法二:投票法

class Solution(object): ### 题目已假定:数组中总是存在多数元素,则众数总是存在 def majorityElement(self, nums): """ :type nums: List[int] :rtype: int """ # 初始化vote为0,最后vote必为正整数(在此题的条件下) vote = 0 for num in nums: if vote == 0: # 当且仅当vote为0时,才更新众数mode为当前的数num mode = num if mode == num: vote += 1 else: vote -= 1 # return mode ### 变:防止数组中不总是存在多数元素,即不存在众数的情况。需要加入此验证代码 count = 0 for num in nums: if num == mode: count += 1 return mode if count > len(nums) // 2 else -1
最新回复(0)