LeetCode169——多数元素(众数)

LeetCode169——多数元素(众数)

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

你可以假设数组是非空的,并且给定的数组总是存在多数元素。
在这里插入图片描述

Result01(排序)

将数组进行排序,排序后的中间元素一定是多数元素。因为多数元素出现的次数大于 ⌊ n/2 ⌋,所以排序后的中间元素一定是多数元素。
在这里插入图片描述
时间复杂度取决于排序算法的复杂度,空间复杂度取决于排序算法所用的栈空间;
若快排则时间为O(nlogn),空间(使用的栈空间)为O(logn)。

Result02(哈希表计数法)

遍历数组,使用哈希表来记录每个元素出现的次数。当某个元素的出现次数超过 ⌊ n/2 ⌋ 时,即可返回该元素作为多数元素。
在这里插入图片描述
时间复杂度:O(N);空间复杂度:O(N)。

/*思路:我们知道出现次数最多的元素大于 ⌊n/2⌋次,所以可以用哈希表来快速统计每个元素出现的次数。算法:我们使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。我们用一个循环遍历数组 nums 并将数组中的每个元素加入哈希映射中。在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键。我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。*/public static Map<Integer,Integer> countNums(int[] arr) {//这个函数 将原来数组中的元素出现的次数 都存在了哈希表中Map<Integer, Integer> hashmap = new HashMap<Integer, Integer>();for (int i : arr) {if (!hashmap.containsKey(arr)) {//哈希表中没这个元素的话hashmap.put(i, 1);//键key代表元素的值 值value代表元素出现的次数} else {hashmap.put(i, hashmap.get(i) + 1);//哈希表中已经有了这个元素了的话 ,get原来的出现的次数 再 加一}}return hashmap;}public static int majorityFind(int[] arr){//获取已经完成存储出现次数的的哈希表Map<Integer,Integer> map = countNums(arr);//Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。// 它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。通常是遍历时会使用它Map.Entry<Integer,Integer>  majorityEntry = null;//存储出现次数最多的元素的 键值对 初始值设为null//遍历for (Map.Entry<Integer,Integer> entry : map.entrySet()){//满足条件则更新最大值if (majorityEntry == null || entry.getValue() > majorityEntry.getValue()){majorityEntry = entry;}}//返回最大值return majorityEntry.getValue();}

Result03(摩尔投票法Boyer-Moore Voting Algorithm)

核心思想是:“对拼消耗”
假设第一个元素是多数元素,然后遍历数组,对于当前元素,如果与候选多数元素相同,则计数器加1,如果与候选多数元素不同,则计数器减1。当计数器减为0时,将当前元素设为新的候选多数元素,并重置计数器。最终留下的候选多数元素就是答案。
在这里插入图片描述
时间复杂度O(N),空间复杂度O(1)。

public static int majorityElement(int[] nums) {int count = 0;int candidate = 0;// 摩尔投票算法for (int num : nums) {if (count == 0) {candidate = num;}count += (num == candidate) ? 1 : -1;}return candidate;}

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

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

相关文章

从0到1之微信小程序快速入门(02)

目录 页面导航 - 声明式导航 1. 导航到 tabBar 页面 2. 导航到非 tabBar 页面 3. 后退导航 ​编辑 页面导航 - 编程式导航 页面导航 - 导航传参 页面事件 - 下拉刷新事件 监听下拉刷新事件 停止下拉刷新的效果 页面事件 - 上拉触底事件 监听页面的上拉触底事件 配置…

初学编程入门基础教学视频,中文编程开发语言工具箱之豪华编辑构件,免费版中文编程软件下载

初学编程入门基础教学视频&#xff0c;中文编程开发语言工具箱之豪华编辑构件&#xff0c;免费版中文编程软件下载 构件的其中一个属性、方法&#xff0c;查找内容&#xff0c;替换内容。 构件工具箱非常丰富&#xff0c;其中该构件在 文本件构件板菜单下。 编程系统化课程总目…

Xilinx 7 系列 1.8V LVDS 和 2.5V LVDS 信号之间的 LVDS 兼容性

如果通过LVDS进行接口&#xff0c;可以按照以程图中的步骤操作&#xff0c;以确保满足正确使用LVDS的所有要求。 40191 - 7 系列 - 1.8V LVDS 和 2.5V LVDS 信号之间的 LVDS 兼容性 与LVDS兼容驱动器和接收器连接时&#xff0c;7系列LVDS和LVDS_25输入和输出应该不存在兼容性问…

卷积总结篇(普通卷积、转置卷积、膨胀卷积、分组卷积和深度可分离卷积)

目录 一、普通卷积&#xff1a;&#xff08;“卷积”就是“加权求和”&#xff09; 1.以2D卷积为例&#xff0c;2D卷积是一个相当简单的操作 2.卷积后的尺寸大小转换公式 3.功能 4.各个指标比较&#xff08;参数量、计算量、感受野&#xff09; 5.代码实现 二、转置卷积…

[架构之路-246/创业之路-77]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 客户关系管理系统CRM

目录 前言&#xff1a; 一、企业信息化的结果&#xff1a;常见企业信息化软件 1.1 客户关系管理系统CRM 1.1.1 什么是客户关系管理系统 1.1.2 CRM总体架构 1.1.3 什么类型的企业需要CRM 1.1.4 创业公司在什么阶段需要CRM 1.1.5 研发型创业公司什么时候需要CRM 1.1.6 C…

【OpenCV实现图像找到轮廓的不同特征,就像面积,周长,质心,边界框等等。】

文章目录 概要图像矩凸包边界矩形 概要 OpenCV是一个流行的计算机视觉库&#xff0c;它提供了许多图像处理和分析功能&#xff0c;其中包括查找图像中物体的轮廓。通过查找轮廓&#xff0c;可以提取许多有用的特征&#xff0c;如面积、周长、质心、边界框等。 以下是几种使用…

Docker:安装MySQL

Docker&#xff1a;安装MySQL 1. 部署MySQL2.部署多个MySQL服务 1. 部署MySQL 首先需要安装Docker&#xff0c;安装Docker地址&#xff1a;http://t.csdnimg.cn/utPGF 安装命令&#xff1a; docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT…

DIY相机(一)libcamera库

相机选型 DIY相机首先是要确定使用的相机型号。兼容树莓派&#xff0c;画质好一些的&#xff0c;目前主要有两款&#xff1a;一是Raspberry Pi Camera Module 3&#xff0c;二是Raspberry Pi HQ Camera。 下图是Raspberry Pi Camera Module 3的相关特性。支持自动对焦和HDR等…

python随手小练14

题目&#xff1a; 文件操作 &#xff1a; 根据文件要求&#xff08;测试&#xff09;筛选出数据并且放入一个新的文件 具体操作&#xff1a; f1 open("1.txt","r",encoding"UTF-8") f2 open("2.txt","w",encoding"U…

软考系统架构师知识点集锦八:嵌入式系统

一、考情分析 二、考点精讲 2.1嵌入式系统概述 2.1.1基本概念 (1)嵌入式系统是以应用为中心、以计算机技术为基础,并将可配置与可裁剪的软、硬件集成于一体的专用计算机系统&#xff0c;需要满足应用对功能、可靠性、成本、体积和功耗等方面的严格要求。 (2)从计算机角度看,嵌…

轻量封装WebGPU渲染系统示例<8>- 渲染器基本场景管理(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/RSceneTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5. 用户操作和渲…

数据结构:算法(特性,时间复杂度,空间复杂度)

目录 1.算法的概念2.算法的特性1.有穷性2.确定性3.可行性4.输入5.输出 3.好算法的特质1.正确性2.可读性3.健壮性4.高效率与低存储需求 4.算法的时间复杂度1.事后统计的问题2.复杂度表示的计算1.加法规则2.乘法规则3.常见函数数量级比较 5.算法的空间复杂度1.程序的内存需求2.例…

SpringBoot通过注解形式实现系统操作日志

介绍 我们在日常开发工作中&#xff0c;肯定逃不开与日志接触&#xff0c;一些比较严谨的后台管理系统里面会涉及到一些比较重要的资料&#xff0c;有些公司为了知道有哪些人登录了系统&#xff0c;是谁在什么时候修改了用户信息或者资料&#xff0c;所以就有了操作日志这么个…

1.4 安全服务

思维导图&#xff1a; 1.4 安全服务 定义&#xff1a;在通信开放系统中&#xff0c;为系统或数据传输提供足够安全的协议层服务。 RFC4949 定义&#xff1a;由系统提供的对系统资源进行特殊保护的处理或通信服务。安全服务通过安全机制来实现安全策略。 分类&#xff1a;X.800 …

Flink将数据写入MySQL(JDBC)

一、写在前面 在实际的生产环境中&#xff0c;我们经常会把Flink处理的数据写入MySQL、Doris等数据库中&#xff0c;下面以MySQL为例&#xff0c;使用JDBC的方式将Flink的数据实时数据写入MySQL。 二、代码示例 2.1 版本说明 <flink.version>1.14.6</flink.version…

故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断 模型描述 利用各种检查和测试方法,发现系统和设备是否存在故障的过程是故障检测;而进一步确定故障所在大致部位的过程是故障定位。故障…

Linux网络编程二(TCP三次握手、四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

TCP三次握手 TCP三次握手(TCP three-way handshake)是TCP协议建立可靠连接的过程&#xff0c;确保客户端和服务器之间可以进行可靠的通信。下面是TCP三次握手的详细过程&#xff1a; 假设客户端为A&#xff0c;服务器为B 1、第一次握手&#xff08;SYN1&#xff0c;seq500&…

03_Flutter自定义下拉菜单

03_Flutter自定义下拉菜单 在Flutter的内置api中&#xff0c;可以使用showMenu实现类似下拉菜单的效果&#xff0c;或者使用PopupMenuButton组件&#xff0c;PopupMenuButton内部也是使用了showMenu这个api&#xff0c;但是使用showMenu时&#xff0c;下拉面板的显示已经被约定…

List的add(int index,E element)陷阱,不得不防

项目场景&#xff1a; 项目中有两个List列表&#xff0c;一个是List1用来存储一个标识&#xff0c;后续会根据这个标识去重。 一个List2是用来返回对象的&#xff0c;其中对象里也有一个属性List3。现需要将重复的标识数据追加到List3 我想到的两个方案&#xff1a; 尽量不动…

吴恩达《机器学习》2-5->2-7:梯度下降算法与理解

一、梯度下降算法 梯度下降算法的目标是通过反复迭代来更新模型参数&#xff0c;以便最小化代价函数。代价函数通常用于衡量模型的性能&#xff0c;我们希望找到使代价函数最小的参数值。这个过程通常分为以下几个步骤&#xff1a; 初始化参数&#xff1a; 随机或设定初始参数…