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

众数问题

  • 题目描述:
  • 考虑执行效率的解法([之前整理过看这里](https://blog.csdn.net/qq_33489955/article/details/116174983?spm=1001.2014.3001.5501))
  • 调包解法
    • 利用scipy下stats模块
    • 利用bincount,argmax() ,但此方法可能会报错,np.bincount()不接受负值

题目描述:

python 每日一题 :力扣 169 多数元素_第1张图片

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

# 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)

python 每日一题 :力扣 169 多数元素_第2张图片

你可能感兴趣的:(leetcode)