leedcode 多数元素

自己写的:
复制代码
class Solution:
    def majorityElement(self, nums):
        # 创建一个空字典用于存储数字和其出现次数
        mydict = dict()

        # 遍历输入的列表 nums
        for i in nums:
            # 如果数字 i 不在字典中,将其添加到字典,并初始化计数为 0
            if i not in mydict:
                mydict.update({i: 0})
            
            # 如果数字 i 在字典中,增加其计数
            if i in mydict:
                mydict[i] += 1
        
        # 打印字典,显示每个数字的出现次数
        print(mydict)
        
        # 使用 max 函数找到字典中值最大的键,即出现次数最多的数字
        max_num = max(mydict, key=mydict.get)
        
        # 返回出现次数最多的数字
        return max_num
复制代码

 分治算法:(类似于快排)

复制代码
from typing import List


class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        # 调用辅助函数 findmajor 处理整个数组
        return self.findmajor(nums, 0, len(nums) - 1)

    def findmajor(self, nums, left, right):
        # 当左右指针相等时,说明只有一个元素,直接返回该元素
        if left == right:
            return nums[left]

        # 分割数组,计算中间位置
        mid = left + (right - left) // 2

        # 递归地在左右子数组中寻找众数
        left_major = self.findmajor(nums, left, mid)
        right_major = self.findmajor(nums, mid + 1, right)

        # 求解
        if left_major == right_major:
            return left_major
        #求解失败 进入合并阶段
        else:
            # 计算左右两个候选众数在整个区间的出现次数
            leftcount, rightcount = 0, 0
            for i in range(left, right + 1):
                if left_major == nums[i]:
                    leftcount += 1
                if right_major == nums[i]:
                    rightcount += 1

            # 返回出现次数较多的众数
            if leftcount >= rightcount:
                return left_major
            else:
                return right_major
复制代码

 

posted @   Junior_bond  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示