C# 多数元素

news2024/11/17 11:29:18

169 多数元素

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

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:nums = [3,2,3]
输出:3
示例 2:

输入:nums = [2,2,1,1,1,2,2]
输出:2

提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/majority-element

解决方案:

提供思路

1)最直观的解法是统计数组中每个元素的出现次数,然后寻找出现次数大于 [n/2] 的元素。

遍历数组,使用哈希表记录每个元素的出现次数,遍历结束之后即可得到数组中每个元素的出现次数。然后遍历哈希表,对于哈希表中的每个元素得到出现次数,返回出现次数大于 [n/2] 的元素。

2)另一个解法是将数组排序后得到多数元素。排序后的数组满足相等的元素一定出现在数组中的相邻位置,由于多数元素在数组中的出现次数大于 [n/2],因此排序后的数组中存在至少 [n/2]+1 个连续的元素都是多数元素,下标 [n/2]的元素一定是多数元素。理由如下:

如果多数元素是数组中的最小元素,则排序后的数组从下标 0 到下标 [n/2] 的元素都是多数元素;

如果多数元素是数组中的最大元素,则排序后的数组从下标 [n/2]到下标 n-1的元素都是多数元素;

如果多数元素不是数组中的最小元素和最大元素,则排序后的数组的下标 0 和下标 n−1 的元素都不是多数元素,多数元素的开始下标一定小于 [n/2],结束下标一定大于 [n/2],下标 [n/2] 的元素一定是多数元素。

因此将数组排序之后返回下标 [n/2]的元素即可。

3)寻找多数元素的另一种解法是摩尔投票算法,其时间复杂度是 O(n),空间复杂度是 O(1)。

摩尔投票算法由 Robert S. Boyer 和 J Strother Moore 提出,该算法的基本思想是:在每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。

推荐第二种。

上代码:

//1
public class Solution
{
    public int MajorityElement(int[] nums)
    {
        IDictionary<int, int> counts = new Dictionary<int, int>();
        foreach (int num in nums)
        {
            counts.TryAdd(num, 0);
            counts[num]++;
        }
        int majority = 0;
        int n = nums.Length;
        foreach (KeyValuePair<int, int> pair in counts)
        {
            if (pair.Value > n / 2)
            {
                majority = pair.Key;
                break;
            }
        }
        return majority;
    }
}

//2
public class Solution
{
    public int MajorityElement(int[] nums)
    {
        Array.Sort(nums);
        int n = nums.Length;
        return nums[n / 2];
    }
}

//3
public class Solution
{
    public int MajorityElement(int[] nums)
    {
        int majority = nums[0];
        int count = 1;
        int n = nums.Length;
        for (int i = 1; i < n; i++)
        {
            int num = nums[i];
            if (count == 0)
            {
                majority = num;
            }
            if (num == majority)
            {
                count++;
            }
            else
            {
                count--;
            }
        }
        return majority;
    }
}

以上是碰到的第一百六十九题,后续持续更新。感觉对你有帮助的小伙伴可以帮忙点个赞噢!
在这里插入图片描述

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

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

相关文章

FPGA USB FX2 数据回环试验 驱动CY7C68013A实现 提供工程源码和技术支持

目录 1、前言2、我这儿已有的 FPGA USB 通信方案3、CY7C68013A芯片解读和硬件设计FX2 简介SlaveFIFO模式及其配置 4、工程详细设计方案5、vivado工程6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 目前USB2.0的实现方案很多&#xff0c;但就简单好用的角度而言&a…

kkfileview部署使用

1.gitee下载源码 kkFileView: 使用spring boot打造文件文档在线预览项目解决方案&#xff0c;支持doc、docx、ppt、pptx、wps、xls、xlsx、zip、rar、ofd、xmind、bpmn 、eml 、epub、3ds、dwg、psd 、mp4、mp3以及众多类文本类型文件在线预览 2.去掉cad 3.替换水印字体为免费…

php宝塔搭建好用的二次元图系统php源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。本期给大家带来一套好用的二次元图系统php源码。抽时间看了一下&#xff0c;功能还是不错的&#xff0c;有参考价值。感兴趣的朋友可以自行下载学习。 技术架构 PHP7.0 nginx mysql5.7 JS CSS HTMLcnetos7以…

德国汽车行业杂志HANSERautomotive就浪潮信息算法团队在自动驾驶领域所取得的核心突破,进行专题署名报道

近日&#xff0c;德国专业汽车行业杂志HANSERautomotive就浪潮信息算法团队在自动驾驶领域所取得的核心突破&#xff0c;进行专题署名文章报道“Wahrnehmungssysteme und 3D-Objekterkennung Alles im Blick ”(《感知系统和三维物体识别&#xff0c;一切尽收眼底》)。针对AI感…

python ---- 根据文件名称中的数字排序

1. 需求分析 获取文件夹中的所有文件名称&#xff1b;筛选所有文件名称中的图片文件&#xff1b;获取图片文件名称中的数字&#xff1b;对数字排序&#xff1b;返回排序后的图片文件名称列表。 2. 获取所有图片文件名称 2.1 代码实现分析 使用 os.listdir 获取文件夹下的所…

keil_arm满减栈应用场景

.text .global _start _start:满减压栈使用场景ldr sp,0x40000800mov r0,#0x1mov r1,#0x2bl add1_funcadd r0,r0,r1 r0 r0 r1 0x3b stopadd1_func: 压栈保存现场 r0 0x1 r1 0x2stmfd sp!,{r0,r1&#xff0c;lr}mov r0,#0x3mov r1,#0x4bl add2_funcadd r0,r0,r1 r0 r…

如何在Windows中批量创建多个文件夹

你需要更好地组织你的文件和文档吗&#xff1f;如果你在笔记本电脑或台式机上将相关文件分组到不同的文件夹中&#xff0c;那么总是很容易找到你需要的东西。你还可以更改图标的大小&#xff0c;使其在视觉上更美观。 在 Windows 中创建一个文件夹的传统做法是&#xff1a;右键…

【GlobalMapper精品教程】060:用dem提取一条线的高程值

本实验使用的数据有线路数据(line.shp)和数字地形数据(dem.tif),提取线数据的高程值。 文章目录 一、加载实验数据二、生成路径剖面三、导出线路高程四、注意事项【参考阅读】:【ArcGIS微课1000例】0004:值提取至点(Extract value to point) 一、加载实验数据 本实验…

NLP学习笔记(三)

一&#xff1a;分类方法 &#xff08;一&#xff09;逻辑回归 最简单的方法就是将分类问题视为回归问题&#xff0c;采用逻辑回归计算分类的边界。 &#xff08;二&#xff09;softmax回归 softmax的前向传播过程可以分为以下三步&#xff1a; h W T x y ^ s o f t m a …

springboot基于keytool实现https的双向认证

一、环境准备 服务器信息如下&#xff1a; 操作系统说明server-one服务器1server-two服务器2 二、keytool命令解释 -genkey 表示要创建一个新的密钥。 -alias 表示 keystore 的别名。 -keyalg 表示使用的加密算法是 RSA &#xff0c;一种非对称加密算法。 -keysize 表示密…

ubuntu 基础软件

文章目录 一.通过.deb 安装的软件1.谷歌浏览器2.utools3.wps4.VScode5.typora6.搜狗输入法的安装 二.通过命令行安装的软件1.截图工具2.超级终端3.安装 git4.安装net-tools5.安装tree 三.ubuntu的基础设置1.更改软件安装源头2.修改计算机名称 一.通过.deb 安装的软件 下面 .deb…

SpringBoot-集成FTP(上传、下载、删除)

目录 一、引入依赖 二、配置文件 三、Controller层 四、Service层 五、相关工具类 由于服务在内网部署&#xff0c;需要使用ftp服务器管理文件&#xff0c;总结如下 一、引入依赖 <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <depen…

基于XDMA 中断模式的 PCIE 上位机与FPGA数据交互架构 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案图像产生、发送、缓存数据处理XDMA简介XDMA中断模式图像读取、输出、显示QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#…

SAP从入门到放弃系列之可用性检查-订单物料可用性检查-Part2

文章目录 一、概述二、物料可用性检查如何锁定库存2.1实现思路2.2系统设置关键点 三、系统测试数据3.1、勾选含预留选项的测试效果3.2、含相关预留3.2.1含相关预留-排除3.2.2含相关预留-仅可领料3.2.3含相关预留-全部 四、最后总结&#xff1a; 一、概述 物料可用性检查最终的…

【Linux】shell中快速遍历所有文件下匹配的内容

目录 1.举例 2.find命令 2.1. find命令作用 2.2. find命令选项基本格式 2.3. 常用选项 2.4. 常用动作 2.5. 根据文件名进行匹配 2.5.2 在/home目录下查找以.txt结尾的文件名 2.5.3 同上&#xff0c;但忽略大小写 2.5.4 查找 /home/ 下所有以.txt或.pdf结尾的文件…

五、卷积神经网络

文章目录 前言一、图像卷积1.1 不变性1.2 互相关运算1.3 卷积层1.4 互相关和卷积1.5 特征映射和感受野 二、填充和步幅2.1 填充2.2 步幅 三、多输入多输出通道3.1 多输入通道3.2 多输出通道3.3 11卷积层 四、汇聚层/池化层4.1 最大汇聚层与平均汇聚层4.2 填充和步幅4.3 多个通道…

Linux下安装/使用mariadb

文章目录 第一章&#xff1a;mariadb在rhel7上的使用第二章&#xff1a;mariadb在rhel6上的安装&#xff08;1&#xff09;编译源码包&#xff08;比较慢&#xff09;&#xff08;2&#xff09;二进制包安装&#xff08;比较推荐&#xff09; 第一章&#xff1a;mariadb在rhel7…

【Android】Android虚拟机

虚拟机 Android的虚拟机主要有两种&#xff1a;Dalvik 虚拟机和 ART&#xff08;Android Runtime&#xff09;虚拟机。 Dalvik 虚拟机 Dalvik 虚拟机是 Android 早期使用的虚拟机&#xff0c;它基于寄存器架构。从Android 2.2版本开始&#xff0c;支持JIT即时编译&#xff08…

计算机系统 基础知识点汇总,超全!!!

计算基础知识点合集来啦&#xff01;&#xff01;&#xff01; 更多知识请关注我&#xff01;&#xff01;&#xff01; 近期内容&#xff1a; 第二章 数据结构与算法 知识点总结第三章 程序设计基础知识点整理第四章 软件工程基础知识点汇总第五章 数据库基础知识pyhon基础知…

JVM 调优设置

堆大小设置 JVM 中最大堆大小有三方面限制&#xff1a;相关操作系统的数据模型&#xff08;32-bt还是64-bit&#xff09;限制&#xff1b;系统的可用虚拟内存限制&#xff1b;系统的可用物理内存限制。32位系统下&#xff0c;一般限制在1.5G~2G&#xff1b;64为操作系统对内存无…