我的编码学习之多数元素

题目:多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

算法1:集合去重,count每一个元素,超过半数,即找到

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        set_nums = set(nums)
        for i in set_nums:
            if nums.count(i) > len(nums)//2:
                return i

算法2:摩尔投票法

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        mode_vote = 0
        mode = 0
        for i in nums:
            if mode_vote == 0:
                mode = i
            if i == mode:
                mode_vote += 1
            else:
                mode_vote -= 1
        return mode

摩尔投票法是一种在数组或序列中查找出现次数超过一半的主要元素的算法。‌ 摩尔投票法通过不同元素之间的抵消来找到可能的主要元素候选者,并在最后验证候选者是否真正满足要求。具体来说,摩尔投票法的核心思想是通过不同元素之间的“抵消”来找到可能的多数元素候选者,最后通过验证候选者是否真正满足多数元素的要求来确定最终结果。‌

摩尔投票法的主要应用是求众数,即在一组数字中出现次数最多的数字。算法的基本思想是通过遍历数组,对于每个元素,如果当前候选人的计数为0,则将当前元素设为新的候选人,并增加计数;如果当前元素与候选人相同,则增加计数;如果不同,则减少计数。遍历结束后,最后一个候选人即为众数。‌

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值