1.题目描述
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
2.解题思路
解法一:暴力解法
其实也不算暴力解法,就是使用python自带的sort函数先排序,因为多数元素超过n//2,所以第n//2必是多数元素。
解法二:摩尔投票法
摩尔投票法(Boyer–Moore majority vote algorithm),也被称作「多数投票法」,算法解决的问题是:如何在任意多的候选人中(选票无序),选出获得票数最多的那个。
设置major、count两个指针,major指向元素,count指向该元素出现的次数,遇到和major相同的元素,count+1;反之count-1.当count=0时,major变成下一个元素。
注意:解法一当中包含了一个sort函数,它本身就是一个已经封装好的排序函数,因此解法二使用指针的方式更加底层。
3.程序代码
解法一:暴力解法
class Solution:
def majorityElement(self, nums: List[int]) -> int:
nums.sort()
return nums[len(nums)//2]
解法二:
class Solution(object):
def majorityElement(self, nums):
count=0
major=nums[0]
for i in nums:
if count==0:
major=i
if major==i:
count+=1
else:
count-=1
return major