python 每日一题 :力扣 169 多数元素

本文介绍了两种在Python中寻找数组中占多数元素的高效方法。一种是基于计数器的自定义解决方案,通过遍历数组并维护一个计数器来找到出现次数超过一半的元素。另一种是利用scipy的stats模块中的mode函数,直接返回众数。此外,还讨论了np.bincount()方法在处理非负整数数组时的应用,但需要注意它不接受负值。
摘要由CSDN通过智能技术生成

题目描述:

在这里插入图片描述

考虑执行效率的解法(之前整理过看这里

# counter 是计数器,计算出现数字的权重
# counter 为0时,说明前边没有数字,或者前边的数字没有超半数,从而counter值被抵消,
# 之后比较后面的就好(因为要求得是50%以上的数)
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        counter , temp = 0 , None
        for num in nums:
            if counter==0:
                temp = num
                counter += 1
            else:
                if temp == num:
                    counter += 1
                else:
                    counter -= 1 
        return temp

在这里插入图片描述

调包解法

利用scipy下stats模块

from scipy import stats
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        return stats.mode(nums)[0].tolist()[0]

在这里插入图片描述
理解 :

from scipy import stats
nums = [2,2,1,1,1,2,2]
stats.mode(nums) # ModeResult(mode=array([2]), count=array([4]))

stats.mode(nums)[0] # array([2])

stats.mode(nums)[0].tolist() # [2]

stats.mode(nums)[0][0] # 2

利用bincount,argmax() ,但此方法可能会报错,np.bincount()不接受负值

bincount() 统计非负整数的个数,不能统计浮点数
np.argmax()函数用法解析
np.bincount() 理解 但是参考的时候请注意,该博主没能分清楚直方图和柱状图的区别,别被误导了
题解:

import numpy as np
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums = np.array(nums)
        counts = np.bincount(nums)
        return int(np.argmax(counts))

理解:

import numpy as np
counts = np.bincounts(nums)

nums = [2,2,1,1,1,2,2] 时

nums = [2,2,1,1,1,2,2]
counts = np.bincount(nums)
counts # array([0, 3, 4], dtype=int64)

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值