python众数_169. 求众数(Python)

题目

难度:★☆☆☆☆

类型:数学

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

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

示例

示例 1:

输入: [3,2,3]

输出: 3

示例 2:

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

输出: 2

解答

方案1:字典(哈希表)

为了找到出现次数最多的数,最简单的逻辑就是统计每次数字出现的次数,再拿取出其中出现次数最多的数字。该方法道理简单,但是内存开销较大。

class Solution(object):

def majorityElement(self, nums):

"""

:type nums: List[int]

:rtype: int

"""

count = {}

for num in nums: # 统计每个数字出现的次数

if num in count:

count[num] += 1

else:

count[num] = 1

return {v: k for k, v in count.items()}[max(count.values())] # 字典键值反转,找到出现次数最多的数字

方案2:数字统计

这道题目所求的众数的定义与常规概念不同的是,这里众数的出现次数要比数组中其他所有元素要多的,根据这个原理,我们将结果变量(res)初始化为数组第一个数,另外准备一个统计变量(count),当这个变量遇到和结果相同的数则加一,否则减一,减为零时更换结果变量为下一个数,由于众数出现次数多于其他字符,那么数组遍历结束后统计变量一定大于零,且此时结果变量中的数即为众数。

class Solution(object):

def majorityElement(self, nums):

"""

:type nums: List[int]

:rtype: int

"""

count, res = 0, nums[0] # 初始化计数器和结果

for i in range(len(nums)-1): # 遍历数组中每一个数

if nums[i] == res: # 如果当前的数和结果变量相同

count += 1 # 计数器+1

else: # 否则

count -= 1 # 计数器-1

if count == 0: # 如果减到了0

res = nums[i+1] # 那么更新结果变量为下一个数

return res # 返回结果

方案3:排序

这里众数的的出现次数超过其他元素,因此我们将数据进行排序后,最中间的数字一定是众数。

class Solution(object):

def majorityElement(self, nums):

"""

:type nums: List[int]

:rtype: int

"""

nums.sort()

return nums[len(nums) // 2]

如有疑问或建议,欢迎评论区留言~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值