题目
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于
⌊ n/2 ⌋
的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
我的题解
class Solution:
def majorityElement(self, nums: List[int]) -> int:
lens=len(nums)
mid=lens//2
nums.sort()
return nums[mid]
Accepted
- 47/47 cases passed (28 ms)
- Your runtime beats 98.83 % of python3 submissions
- Your memory usage beats 18.47 % of python3 submissions (16.2 MB)
官方题解
官方方法很多,学习Moore投票法。
来自【评论高赞】:从第一个数开始count=1,遇到相同的就加1,遇到不同的就减1,减到0就重新换个数开始计数,总能找到最多的那个。
求众数,特别是[n/2]次数的好方法。
证明参考:如何理解摩尔投票算法? - A23187的回答 - 知乎 https://www.zhihu.com/question/49973163/answer/477886752
class Solution:
def majorityElement(self, nums: List[int]) -> int:
count=1
res=nums[0]
for num in nums:
if num != res:
count-=1
if count == 0:
res=num
count=1
else:
count+=1
return res
Accepted
- 47/47 cases passed (40 ms)
- Your runtime beats 67.62 % of python3 submissions
- Your memory usage beats 10.67 % of python3 submissions (16.3 MB)
总结
内置的sort比自己的要快!因为被优化过的。可以能用内置的就内置。