- 由于多数元素在数组中出现的次数大于n//2。如果将数组按照单调递增或单调递减的顺序排序,对奇数个元素和偶数个元素的数组都存在3种情况。
- 对于奇数个元素的数组。若多数元素位于数组最右端,那么只有n//2位置的元素为多数,题目才成立。若多数元素位于数组最左端,那么同样,只有n//2位置的元素为多数,题目才成立。如果多数元素位于数组中间位置,那么就更不用说了,n//2位置的元素必为多数元素。
- 对于偶数个元素的数组。若多数元素位于数组的最右端,那么n//2位置的元素必为多数元素。若多数元素位于数组的最左端,那么n//2位置的元素必为多数元素。如果多数元素位于数组中间位置,那么就更不用说了,n//2位置的元素必为多数元素。
- 如果还是觉得难以理解,可以动手像下图一样画一画,实际上非常简单。不过,一开始,我也是始终无法理解。
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
return nums[len(nums)//2]
4. 编写验证过程中的完整代码
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
return nums[len(nums)//2]
solution = Solution()
print(solution.majorityElement([2,2,1,1,1,2,2]))
5.官方优质代码
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
counts = Counter(nums)
return max(counts.keys(), key=counts.get)
6.官方优质代码补充(小小白可以直接复制到编辑器运行的那种代码)
from collections import Counter
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
counts = Counter(nums)
return max(counts.keys(), key=counts.get)
solution = Solution()
print(solution.majorityElement([2,2,1,1,1,2,2]))
注意:要从collections包中导入Counter。Counter可以对数组/字符串中的元素/字符出现频率进行统计。 元素/字符则为键,对应元素/字符出现次数为值。另外,需要注意的是max函数,在没有key参数时,统计的是最大的键,在有key参数的时候,统计的是出现频率最高的键。
拒绝内耗,永远心存善念。
虽然迷茫,也不停止前行。



