9.多数元素

news2024/11/27 2:21:57

文章目录

  • 题目简介
  • 题目解答
    • 解法一:排序
      • 代码:
      • 复杂度分析:
    • 解法二:摩尔投票法
      • 代码:
      • 复杂度分析:
    • 解法三:哈希表
      • 代码
      • 复杂度分析:
  • 题目链接

大家好,我是晓星航。今天为大家带来的是 多数元素面试题 相关的讲解!😀

题目简介

在这里插入图片描述

题目解答

解法一:排序

思路:如果蒋数组nums中的所有元素按照单调递增或单调递减的顺序排序,那么下标为[n/2] (下标从0开始) 的元素一定是众数。

代码:

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length / 2];
    }
}

这里解法很简单,先用Arrays下的sort排序方法给数组排序,然后我们找到排序好之后的数组中间的元素即是出现最多的那个元素。

官方解答:
在这里插入图片描述

模拟演示:
在这里插入图片描述

复杂度分析:

时间复杂度:O(n log⁡ n)将数组排序的时间复杂度为 O(n log ⁡n)

空间复杂度:O(log⁡ n)。如果使用语言自带的排序算法,需要使用 O(log ⁡n)的栈空间。如果自己编写堆排序,则只需要使用 O(1) 的额外空间。


解法二:摩尔投票法

思路:
在这里插入图片描述

代码:

class Solution {
    public int majorityElement(int[] nums) {
        int cand_num = nums[0], count = 1;
        for (int i = 1; i < nums.length; ++i) {
            if (cand_num == nums[i])
                ++count;
            else if (--count == 0) {
                cand_num = nums[i];
                count = 1;
            }
        }
        return cand_num;
    }
}

在这里插入图片描述

复杂度分析:

  • 时间复杂度:O(n)O(n)O(n)。Boyer-Moore 算法只对数组进行了一次遍历。

  • 空间复杂度:O(1)O(1)O(1)。Boyer-Moore 算法只需要常数级别的额外空间。

解法二来源于力扣大佬 ̶.̶G̶F̶u̶'̶ 、̶ ̶|的解法。


解法三:哈希表

我们使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。

我们用一个循环遍历数组 nums 并将数组中的每个元素加入哈希映射中。在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键。我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。

代码

class Solution {
    private Map<Integer, Integer> countNums(int[] nums) {
        Map<Integer, Integer> counts = new HashMap<Integer, Integer>();
        for (int num : nums) {
            if (!counts.containsKey(num)) {
                counts.put(num, 1);
            } else {
                counts.put(num, counts.get(num) + 1);
            }
        }
        return counts;
    }

    public int majorityElement(int[] nums) {
        Map<Integer, Integer> counts = countNums(nums);

        Map.Entry<Integer, Integer> majorityEntry = null;
        for (Map.Entry<Integer, Integer> entry : counts.entrySet()) {
            if (majorityEntry == null || entry.getValue() > majorityEntry.getValue()) {
                majorityEntry = entry;
            }
        }

        return majorityEntry.getKey();
    }
}

引用方法分析:

  • .get():根据map集合中元素的Key来获取相应元素的Value
  • .put():向map集合中添加Key为key,Value为value的元素,当集合中没有这个key时返回null,当集合中有这个key时返回前一个value。
  • .enterSet():返回 Map 中所有键值对的集合。每一个元素都是一个 Map.Entry 对象,其中包含一个 key 和一个 value。
  • .containsKey():判断 Map 中是否包含指定的 key
  • .getKey():获取Map中的key值
  • getValue():获取Map中的value值

复杂度分析:

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。我们遍历数组 nums 一次,对于 nums 中的每一个元素,将其插入哈希表都只需要常数时间。如果在遍历时没有维护最大值,在遍历结束后还需要对哈希表进行遍历,因为哈希表中占用的空间为 O(n)(可参考下文的空间复杂度分析),那么遍历的时间不会超过 O(n)。因此总时间复杂度为 O(n)。
  • 空间复杂度:O(n)。哈希表最多包含 n−⌊n/2⌋个键值对,所以占用的空间为 O(n)。这是因为任意一个长度为 n 的数组最多只能包含 n 个不同的值,但题中保证 nums 一定有一个众数,会占用(最少) ⌊n/2⌋+1个数字。因此最多有 n−(⌊n/2⌋+1)个不同的其他数字,所以最多有 n−⌊n/2⌋个不同的元素。

题目链接

169. 多数元素

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

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

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

相关文章

Meilisearch vs Elasticsearch

2个搜索引擎的比较&#xff08;官方说法&#xff09;&#xff1a;Meilisearch vs Elasticsearch Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需…

《intel开发手册卷3》读书笔记1

1、CPU工作模式 1&#xff09;实模式&#xff1a;8086的寄存器只有16位&#xff0c;我们也习惯于称8086的工作模式为16位模式。后续的CPU为了保持兼容性&#xff0c;在芯片上了电以后&#xff0c;还必须运行于16位模式之下。这种模式还有个正式的名字叫做实模式。在实模式下&am…

转移插槽笔记

4.3.4.转移插槽 我们要将num存储到7004节点&#xff0c;因此需要先看看num的插槽是多少&#xff1a; 如上图所示&#xff0c;num的插槽为2765. 我们可以将0~3000的插槽从7001转移到7004&#xff0c;命令格式如下&#xff1a; 具体命令如下&#xff1a; 建立连接&#xff1a;…

零一万物发布千亿参数模型Yi-Large,李开复呼吁关注TC-PMF,拒绝Ofo式烧钱打法

5月13日&#xff0c;在零一万物成立一周年之际&#xff0c;零一万物 CEO 李开复博士携带千亿参数 Yi-Large 闭源模型正式亮相&#xff0c;正式进军全球 SOTA 顶级大模型之首&#xff0c;在斯坦福最新的 AlpacaEval 2.0 达到全球大模型 Win Rate 第一。除此之外&#xff0c;零一…

你知道在 TS 中判断两个类型相等有多难吗?

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ TypeScript 中的类型相等 如果我们想判断两个变量是否相等&#xff0c;可以简单的通过 或 来进行比较&#xff0c;但是对比两个类型则不行。 在 TypeScript 中&#xff0c;类型是静态的&#xff0c;只会在编译时…

国标GB28181协议EasyGBS视频监控云平台端口正常却不能播放,是什么原因?

国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff0c;分发的视频…

Deepin20.9使用系统工具升级到DeepinV23Bete3没有显卡驱动问题

心血来潮看到官网上有最新的桌面版就升级了 原来Deepin20.9使用系统工具升级到DeepinV23Bete3 升级后就出现错误了&#xff0c;没有分辨率设置&#xff0c;分辨率为800*600 查看硬件驱动&#xff0c;发现是没有显卡驱动 上命令直接安装&#xff1a; sudo apt-get install…

数据结构-栈的讲解

栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底&#xff08;因为先进后出&#xff09;。栈中的数据元素遵守后进先出LIFO&#xff08;Last In Firs…

【游戏引擎】unity

目录 Unity入门教程&#xff1a;从零到英雄的旅程前言第一步&#xff1a;下载和安装Unity第二步&#xff1a;创建你的第一个Unity项目第三步&#xff1a;熟悉Unity界面第四步&#xff1a;创建一个简单的游戏对象第五步&#xff1a;编写脚本赋予游戏对象生命第六步&#xff1a;运…

【一触即发】快来围观C3安全大会酷炫九宫格!

C3安全大会2024 2024年5月18日 南京扬子江国际会议中心 C3安全大会2024 即将揭幕&#xff01; 图解C3 | 九宫格 数智变革&#xff0c;“AI”正以其颠覆性力量&#xff0c;重塑我们对未来的定义。亚信安全邀您共襄盛举&#xff0c;见证这场于5月18日盛大开幕的C3安全大会2024…

办公软件_EdrawMax 免安装版教程 (亿图图示综合图形图表设计软件)

前言 万兴亿图图示(Wondershare EdrawMax)是一款综合图形图表设计软件,Visio国产替代.亿图图示中文版(Edraw Max)是一款办公绘图软件的思维导图软件.无需任何绘图功底,即可轻松创建各类思维导图.亿图图示专家,提供大量事例和在线模板,用于创建流程图,信息图,组织结构图,科学教…

数据可视化训练第6天(美国人口调查获得关于收入与教育背景的数据,并且可视化)

数据来源 https://archive.ics.uci.edu/dataset/2/adult 过程 首先&#xff1b;关于教育背景的部分翻译有问题。 本次使用字典嵌套记录数据&#xff0c;并且通过lambda在sorted内部进行对某个字典的排序&#xff0c;最后用plotly进行绘图 本次提取数据的时候&#xff0c;用到…

海外青云私有云产品种类介绍

青云(QingCloud)是一家领先的云计算服务提供商&#xff0c;其私有云产品系列在海外市场上也备受关注。以下是对海外青云私有云产品种类的科普介绍。 在海外市场中&#xff0c;青云的私有云产品以其高度的灵活性、可扩展性和安全性而著称。这些产品能够满足不同行业、不同规模企…

2024中国(重庆)航空航天暨无人机低空经济展览会

2024中国&#xff08;重庆&#xff09;航空航天暨无人机低空经济展览会 邀请函 组织机构 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 展会概括∶ 2024中国航空航天暨无人机低空经济展览会将于2024年8月23-25日在重庆…

bat xcopy 解析

echo off set source_folder"C:\path\to\source" set destination_folder"C:\path\to\destination" set exclude_file"C:\path\to\excluded_folders.txt"REM 创建目标文件夹&#xff08;如果不存在&#xff09; mkdir %destination_folder% 2>…

测评|喵都吃肥了,这篇主食冻干测评的推文终于完成了...VE、希喂、SC对比结果

想要为猫咪提供高质量的主食&#xff0c;主食冻干无疑是理想之选。主食冻干不仅肉含量高、易于吸收&#xff0c;而且富含多种普通猫粮难以提供的营养素&#xff0c;全面满足猫咪的微量元素需求。其营养价值与生骨肉喂养相媲美&#xff0c;同时避免了生骨肉可能带来的细菌超标问…

互联网盈利:APP广告变现的秘诀!

在数字化的今天&#xff0c;互联网已经成为了人们日常生活中不可或缺的一部分。它不仅改变了我们的生活方式&#xff0c;还创造了无数盈利的机会。其中&#xff0c;移动应用&#xff08;App&#xff09;广告变现是近年来备受瞩目的互联网盈利方式之一。接下来&#xff0c;我们将…

汉诺塔问题和爬楼梯(递归)

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 c语言基础_LaNzikinh篮子的博客-CSDN博客 文章目录 一.爬楼梯问题二.汉诺塔问题总结 一.爬楼梯问题 假设你正…

Shell的运行原理和Linux的权限

Shell的运行原理 Linux严格意义上说是一个操作系统&#xff0c;我们称之为“核心&#xff08;kernel&#xff09;”&#xff0c;但我们一般用户不能直接使用kernel&#xff0c;而是通过kernel的“外壳程序”&#xff0c;也就是所谓的Shell&#xff0c;来与kernel沟通。 Shell…

sql注入---sqli靶场

1.什么是SQL注入 SQL注入是比较常见的网络攻击方式之一&#xff0c;它不是利用操作系统的BUG来实现攻击&#xff0c;而是针对程序员编写时的疏忽&#xff0c;通过SQL语句&#xff0c;实现无账号登录&#xff0c;甚至篡改数据库 2.sql注入原理 攻击者注入一段包含注释符的SQL语…