难度:简单
题目内容:
给定一个大小为n的数组,找到其中的多数元素,就是出现次数大于等于n/2的数。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
题解:
哈希表直接存
python更简单了,直接用字典
class Solution:
def majorityElement(self, nums: List[int]) -> int:
d = dict()
for i in nums:
try:
d[i] += 1
except:
d[i] = 1
return max(d.keys(), key=d.get)
image.png
不过这样未免太简单了,起不到学习的作用
在官方的题解中看到一种解法:Boyer-Moore 投票算法 感觉很有意思,试试看
代码是这样的
class Solution:
def majorityElement(self, nums):
count = 0
candidate = None
for num in nums:
if count == 0:
candidate = num
count += (1 if num == candidate else -1)
return candidate
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/majority-element/solution/duo-shu-yuan-su-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
代码上可以看出来他的方法就是逐个改变众数candidate,如果说众数大于总数的一半的话,那就说明即使其他的数全加起来也不会比众数多,也就是不会让count大于0。
那么这样先设一个数为众数,遇到和他不一样的就-1,一样的就+1,当count归零的时候就更换新众数,那么最后一定是最多的众数成功的夺取了candidate
有兴趣可以看看leetcode的详解或者去搜搜更多的东西。
网友评论