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

【力扣题】题目描述:

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

【Python3】代码:

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

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

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

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

class Solution:def majorityElement(self, nums: List[int]) -> int:from collections import Counteradict = Counter(nums)m = len(nums) // 2for 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 Counteradict = 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 randomm = len(nums) // 2while 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 + lowleft = 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 rightreturn recurse(0,len(nums)-1)

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postman打开后,以前的接口记录不在,问题解决

要不这些文件保存在C:\Users\{用户名}\AppData\Roaming\Postman 比如,你目前使用的window登录用户是abc,那么地址便是C:\Users\abc\AppData\Roaming\Postman 打开后,这个目录下会有一些命名为backup-yyyy-MM-ddThh-mm-ss.SSSZ.json类似的文…

数据结构和算法概述

什么是数据结构? 官方解释: 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 大白话: 数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储…

知识分享|分段函数线性化及matlab测试

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all;gn10;tn1;x_pfsdpvar(1, tn,…

云原生Docker Cgroups资源控制操作

目录 资源控制 cgroups四大功能 CPU 资源控制 设置CPU使用率上限 进行CPU压力测试 设置50%的比例分配CPU使用时间上限 设置CPU资源占用比(设置多个容器时才有效) 设置容器绑定指定的CPU 对内存使用的限制 限制容器可以使用的最大内存 限制可用的…

代码随想录Day24 LeetCode T491 递增子序列 LeetCode T46 全排列 LrrtCode T47 全排列II

LeetCode T491 递增子序列 题目链接:491. 递增子序列 - 力扣(LeetCode) 题目思路: 首先这里的测试用例很容易误导我们,这道题不能使用上次子集的思路对数组先排序,使用一个used数组来解决问题. 我们用[4,7,6,7]举例这道题的递增序列不存在[4,6,7,7]这个…

iconfont

iconfont-阿里巴巴矢量图标库https://www.iconfont.cn/ UI - 优设网 - 学设计上优设 (uisdc.com)https://www.uisdc.com/category/uiicon TreeNode moveNode (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); Point pt; …

重庆助理工程师申请步骤及注意事项

目录 一、前言二、步骤1. 职称系统网址 2. 一定使用谷歌浏览器,其他白搭三、材料准备1.思想和工作-要手写签字并盖单位公章,无模板2.近五年年度考核-填优秀,并改单位公章,无模板 四、流程1.单位公示要公示5个工作日,再…

C语言进阶第九课 --------动态内存管理

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

Python武器库开发-面向对象篇(六)

面向对象篇(六) 多态 多态指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象调用相同的方法,产生不同的执行结果,多态可以增加代码的灵活度 实现多态的步骤&…

物联网知识复习

物联网的内涵和体系结构 物联网的基本内涵 物联网的基本内涵在于物联,物物相连或者物和人相连的互联网。 也就是说,它是要由物主动发起的,物物互联的互联网。 它的第一层意思是说物和物相连;第二层意思是说物和人相连。 物联网的…

mac上mongodb 以及可视化工具 下载以及安装

简介 1. 下载 官网上的下载地址藏得非常深,不花老半天 根本找不到 下载地址 https://www.mongodb.com/try/download/community 目前最新社区版本7.0.2 下载链接 mac intel芯片 : https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-7.0.2.tgz ma…

VR全景应用广泛体现在哪里?有何优势?

VR全景作为一种新型营销方式,正在逐渐走进人们的视线,它区别于以往单一角度的照片和视频,VR全景制作显得更加直观、更加真实、更加生动。VR全景通过VR技术将所拍摄的图片变成720度可观看的场景模式,把产品的特色以及魅力整体呈现展…

css中px、em、rem、%、vw、vh、vm、rpx 这些单位的区别

序言 px:像素 相对长度单位,相对于显示器屏幕分辨率(推荐使用) em:相对长度单位 基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个…

Origami Studio for Mac:塑造未来,掌握原型设计之巅

在当今高度竞争的设计领域,原型设计的重要性不言而喻。它不仅是沟通想法,也是测试和改进设计的关键环节。而现在,一款强大的原型设计工具——Origami Studio for Mac,正在席卷设计界,以其独特的功能和卓越的性能&#…

【java学习—九】类的成员之四:初始化块(1)

文章目录 1. 初始化块(代码块)的作用2. 静态代码块3. 非静态代码块和静态代码块的特点 1. 初始化块(代码块)的作用 作用:对java对象进行初始化      程序执行的顺序:     ①声明成员变量的默认值 --> ②显式初始化、多个初始化块依次被执行&a…

【29】c++设计模式——>策略模式

策略模式 C中的策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择算法的行为。策略模式通过将算法封装成独立的类,并且使它们可以互相替换,从而使得算法的变化独立于使用算法的客户端。 策略模式通…

天锐绿盾加密软件——企业数据透明加密、防泄露系统

天锐绿盾是一种企业级数据透明加密、防泄密系统,旨在保护企业的核心数据,防止数据泄露和恶意攻击。它采用内核级透明加密技术,可以在不影响员工正常工作的前提下,对需要保护的数据进行加密操作。 PC访问地址: https:/…

C语言之数组

目录 一维数组的定义和使用 二维数组的定义和使用 字符数组和字符串 练习题 练习一 练习二 练习三 一维数组的定义和使用 当涉及到一系列相同类型的数据时,C语言中的一维数组是一种非常有用的数据结构。以下是关于C语言一维数组的定义和使用的详细说明&…

淘宝app商品详情源数据API接口(解决滑块问题)可高并发采集

通过API接口采集淘宝商品列表和app商品详情遇到滑块验证码的解决方法(带SKU和商品描述,支持高并发),主要是解决了高频情况下的阿里系滑块和必须要N多小号才能解决的反扒问题,以后都可以使用本方法: 大家都…