众数问题
题目描述:
考虑执行效率的解法(之前整理过看这里)
# 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)