LeetCode刷题之路:面试题 17.10. 主要元素

如果帮助到您,还请点个关注吧,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
                    






猜你喜欢

转载自blog.csdn.net/as812252319/article/details/115035882
今日推荐