【Python3】【力扣题】169. 多数元素

news2024/9/21 11:09:32

【力扣题】题目描述:

众数:一组数据中出现次数最多的数据。

【Python3】代码:

1、解题思路:哈希表。使用哈希映射存储各元素以及出现的次数,哈希映射中的键值对中的键为元素、值为该元素出现次数。

知识点:collections.Counter(...):Counter对象实例化。用字典形式为各元素计数。

(1-1)遍历哈希映射中的键值对,返回键值对中的值> \frac{n}{2}的元素。

知识点:字典形式.items():返回可遍历的键值对(元组形式即(键,值))。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        from collections import Counter
        adict = Counter(nums)
        m = len(nums) // 2
        for key,val in adict.items():
            if val > m:
                return key

(1-2)对于哈希映射中的键值对,获取值最大的那个键。

知识点:字典形式.items():返回可遍历的所有键。

              字典形式.get(...):通过键获取对应的值。

              max(...):获取最大值。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        from collections import Counter
        adict = Counter(nums)
        return max(adict.keys(),key=adict.get)

2、解题思路:排序。从小到大依次排序,出现次数> \frac{n}{2},那么中间那个数一定是众数。

知识点:序列.sort():在原序列上按从小到大排序。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        nums.sort()
        return nums[len(nums) // 2]

3、解题思路:随机抽数。出现次数> \frac{n}{2},随机抽取一个数大概率就是众数。

知识点:random.choice(...):一组数据中随机选取一个。

              len(序列):获取序列的长度。

              sum(...):求和。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        import random
        m = len(nums) // 2
        while True:
            rand = random.choice(nums)
            if sum(1 for x in nums if x == rand) > m:
                return rand

4、解题思路:分治算法。将一组数据递归分成左右2部分,直到子区间长度为1,再回溯合并比较左右区间值以及值的数量。最终返回数量多的那个值。

知识点:闭包(A函数里有B函数。A函数返回值为B函数但不加括号,实际调用时才加括号),递归(B函数里调用B函数自身)。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        def recurse(low,high) -> int:
            # 最终分成只有一个数的数组,并返回值
            if low == high: return nums[low]

            # 从中间分成左右2部分(递归)
            mid = (high-low) // 2 + low
            left = recurse(low,mid)
            right = recurse(mid+1,high)

            # 分完后,回溯比较左右2部分值以及值的数量。
            # 若左右2部分的值相同,返回哪个都一样
            if left == right: return left
            # 若左右2部分的值不同,左右2部分合并比较2个值的数量,返回数量多的那个值
            left_count = sum(1 for i in range(low,high+1) if nums[i] == left)
            right_count = sum(1 for i in range(low,high+1) if nums[i] == right)
            return left if left_count > right_count else right

        return recurse(0,len(nums)-1)

5、解题思路:Boyer-Moore投票算法。依次遍历每个元素,既然出现次数> \frac{n}{2},众数即使和其他数抵消,最终剩余的一定是众数。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        count = 0
        val = None
        for x in nums:
            if count == 0: 
                val = x
            count += (1 if x == val else -1)
        return val

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1135136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云2023年双11优惠活动和9999元代金券领取规则

2023腾讯云双11优惠价格表终于来了,轻量2核2G3M云服务器88元一年、轻量2核4G5M服务器166.6元一年、3年轻量2核2G4M带宽优惠价366.6元、3年轻量2核4G5M配置566.6元,CVM云服务器2核2G配置SA2实例172.3元一年、标准型S5服务器2核2G配置280.8元一年&#xff…

单目3D目标检测 方法综述——直接回归方法、基于深度信息方法、基于点云信息方法

本文综合整理单目3D目标检测的方法模型,包括:基于几何约束的直接回归方法,基于深度信息的方法,基于点云信息的方法。万字长文,慢慢阅读~ 直接回归方法 涉及到模型包括:MonoCon、MonoDLE、MonoFlex、CUPNet…

大模型在百度智能问答、搜索中的应用

本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队,共同探索智能问答技术的发展方向,文末有简历投递方式。 01 什么是机器问答 机器问答,就是让计算机…

如何利用数字化转型升级,重塑企业核心竞争力?

工程机械行业是一个周期性明显的行业,企业经营受到宏观经济与国家基础设施建设的影响较大,例如企业经济上行时,加大投资扩大生产规模,以满足市场需求的增长,当经济下行时,企业可能面临减产和裁员等问题&…

【Ansible自动化运维工具 第一部分】Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

Ansible常用模块 一、Ansible1.1 简介1.2 工作原理1.3 Ansible的特性1.3.1 特性一:Agentless,即无Agent的存在1.3.2 特性二:幂等性 1.4 Ansible的基本组件 二、Ansible环境安装部署2.1 安装ansible2.2 查看基本信息2.3 配置远程主机清单 三、…

Java练习题-输出二维数组对角线元素和

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又…

DAY34 860.柠檬水找零 + 406.根据身高重建队列

860.柠檬水找零 题目要求:在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元…

优化预算管理流程:Web端实现预算编制的利器

本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言:什么是预算和预算编制 预算 预算是企业在预测、决策的基础上,以数量和金额的形式…

(免费领源码)php#Thinkphp#MYSQL校园二手交易app 99211-计算机毕业设计项目选题推荐

目 录 摘要 Abstract 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 校园二手物品交易app系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析…

用傲梅分区软件分割分区重启系统蓝屏BAD_SYSTEM_CONFIG_INFO,八个解决参考方案

环境: Win11 专业版 HP 笔记本 傲梅分区软件 闪迪16G U盘 Win10 官方镜像文件 Win11PE 系统安装U盘 USB固态硬盘盒 问题描述: 起因 开始使用windows自动磁盘管理工具压缩不了磁盘,提示无法将卷压缩到超出任何不可移动的文件所在点,关闭系统保护还原,删除系统创建…

J41H-40C法兰截止阀型号解析

J41H-40C型号字母含义解析 J41H-40C型号是德特森阀门常用的截止阀型号字母代表的意思是: J——代表阀门类型《截止阀》 4——代表连接方式《法兰》 1——代表结构形式《直流》 H——代表阀座堆焊《不锈钢》 -《分隔键》 40——代表公称压力《4.0MPA》 C——代表阀体材料…

win操作系统下安装Deepspeed

1. 准备cunda环境 下载cuda、cudnn, CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive Log in | NVIDIA Developerhttps://developer.nvidia.com/rdp/cudnn-download 选择版本可以参考里的Index of /anaconda/cloud/p…

通过阿里云创建accessKeyId和accessKeySecret

我们想实现服务端向个人发送短信验证码 需要通过accessKeyId和accessKeySecret 这里可以白嫖阿里云的 这里 我们先访问阿里云官网 阿里云地址 进入后搜索并进入短信服务 如果没登录 就 登录一下先 然后在搜索框搜索短信服务 点击进入 因为我也是第一次操作 我们一起点免费开…

禁止U盘拷贝-保护数据安全

禁止U盘拷贝-保护数据安全 下载使用安企神U盘管理系统 U盘是一种可移动存储设备,可以方便地实现数据的传输和共享。然而,U盘的通用性和便携性也给它带来了安全隐患。如果U盘落入恶意用户手中,可能会导致敏感数据的泄露,给企业和…

在线数据库设计工具Itbuilder

有人说——不具备全局观的设计者想着如果把一片树叶设计的非常美,而忘了树叶需要树枝,树枝是构成大树的一部分,所以说去培育一片森林,才叫做设计。而数据库设计亦是如此,如果纠结于某个列某个表的设计,而忘…

01-windows栈溢出

简单栈溢出 测试环境: win xp sp3 cn 辅助环境:mac,安装了pwntoosl、msf 使用0day安全中的随书文件:0day\02栈溢出原理与实践\2_4_overflow_code_exec\Debug\stack_overflow_exec.exe git clone https://github.com/jas502n/0da…

3. 博弈树 (15分)

下棋属于一种博弈游戏,博弈过程可以用树(博弈树)来表示。假设游戏由两个人( A 和 B )玩,开始由某个人从根结点开始走,两个人轮流走棋,每次只能走一步, 下一步棋只能选择当…

Python 算法高级篇:启发式搜索与 A *算法

Python 算法高级篇:启发式搜索与 A *算法 引言 1. 什么是启发式搜索?1.1 启发式函数的特性1.2 启发式搜索算法 2. A *算法的原理2.1 A *算法的伪代码2.2 A *算法的优点 3. Python 中的 A *算法实现4. 总结 引言 启发式搜索是一种常用于解决路径规划和优…

【Java集合类面试二十九】、说一说HashSet的底层结构

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说一说HashSet的底层结构…

【CCF-A类】IEEE-TRANS系列,1区顶刊,WOS稳定收录32年,对国人友好,仅17天检索!

论文写作堪比西天取经,当我们经历“九九八十一难,取得真经“,还有最关键的一步,就是选刊发表。是“投石问路”,还是“投其所好”? 选刊有多重要,相信只要有过发表SCI经验的人都十分清楚。如果不…