如果帮助到您,还请点个关注吧,hahaha
数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。
示例 1:
输入:[1,2,5,9,5,9,5,5,5]
输出:5
示例 2:
输入:[3,2]
输出:-1
示例 3:
输入:[2,2,1,1,1,2,2]
输出:2
#最直观的思路
可以创建一个字典,将数组中的值设置为字典的key
字典的value为该key所出现的次数
当value 大于 数组长度的一半时变返回其对应的key即可
#摩尔投票法
利用摩尔投票法进行求解
需要注意的是,当遍历完整个数组之后
若count = 0,则代表当前数组肯定不存在主要元素
若count>0,则需要再遍历一次数组,
检查其中value的个数,若大于数组长度的一半时则当前value即为所求
class Solution:
def majorityElement(self, nums: List[int]) -> int:
# if len(nums) == 1:
# return nums[0]
# else:
# dit = {}
# for i in nums:
# if i in dit.keys():
# dit[i] += 1
# if dit[i] >= len(nums) // 2 + 1:
# return i
# else:
# dit[i] = 1
# return -1
value = 0
count = 0
for i in nums:
if count == 0:
value = i
if i == value:
count += 1
if count > len(nums) // 2:
return value
else:
count -= 1
if count > 0:
q = 0
for i in nums:
if i == value:
q += 1
if q > len(nums) // 2:
return value
return -1