问题描述
- 给定一个大小为 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:
list=[0,0,0,0]
for num in nums:
list[num]=list[num]+1
for x in range(4):
if list[x]>len(nums)/2:
return x
#设置保留值方法
class Solution:
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
cnt, ret = 0, 0
for num in nums:
if cnt == 0:
ret = num
if num != ret:
cnt -= 1
else:
cnt += 1
return ret
#排序取值方法
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
return nums[int(len(nums)/2)]