LeetCode-2341. 数组能形成多少数对【哈希表,计数】

2023-11-12

题目描述:

给你一个下标从 0 开始的整数数组 nums 。在一步操作中,你可以执行以下步骤:

从 nums 选出 两个 相等的 整数
从 nums 中移除这两个整数,形成一个 数对
请你在 nums 上多次执行此操作直到无法继续执行。

返回一个下标从 0 开始、长度为 2 的整数数组 answer 作为答案,其中 answer[0] 是形成的数对数目,answer[1] 是对 nums 尽可能执行上述操作后剩下的整数数目。

示例 1:

输入:nums = [1,3,2,1,3,2,2]
输出:[3,1]
解释:
nums[0] 和 nums[3] 形成一个数对,并从 nums 中移除,nums = [3,2,3,2,2] 。
nums[0] 和 nums[2] 形成一个数对,并从 nums 中移除,nums = [2,2,2] 。
nums[0] 和 nums[1] 形成一个数对,并从 nums 中移除,nums = [2] 。
无法形成更多数对。总共形成 3 个数对,nums 中剩下 1 个数字。

示例 2:

输入:nums = [1,1]
输出:[1,0]
解释:nums[0] 和 nums[1] 形成一个数对,并从 nums 中移除,nums = [] 。
无法形成更多数对。总共形成 1 个数对,nums 中剩下 0 个数字。

示例 3:

输入:nums = [0]
输出:[0,1]
解释:无法形成数对,nums 中剩下 1 个数字。

提示:

1 <= nums.length <= 100
0 <= nums[i] <= 100
https://leetcode.cn/problems/maximum-number-of-pairs-in-array/description/

解题思路一:哈希表,将数组中的数加入哈希表中,若有两个相同的数就记录下来,并消去两个。最后只需遍历哈希表中置为1的个数即可。

class Solution {
public:
    vector<int> numberOfPairs(vector<int>& nums) {
        int n=nums.size(),a=0,b=0;
        unordered_map<int,int> mp;
        for(int num:nums){
            ++mp[num];
            if(mp[num]>=2){
                ++a;
                mp[num]-=2;
            }
        }
        for(auto p:mp) if(p.second) ++b;
        return {a,b};        
    }
};

时间复杂度:O(n)
空间复杂度:O(n)//哈希表

解题思路二:优化是,将a最后进行计算,即a(形成的数对数目)等于每个数的个数除2下取整。然后b(剩下的整数数目)是n-2*a

class Solution {
public:
    vector<int> numberOfPairs(vector<int>& nums) {
        int n=nums.size(),a=0;
        unordered_map<int,int> mp;
        for(int num:nums) ++mp[num];
        for(auto p:mp) a+=p.second>>1;
        return {a,n-2*a};
    }
};

时间复杂度:O(n)
空间复杂度:O(n)//哈希表

解题思路三:0


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode-2341. 数组能形成多少数对【哈希表,计数】 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的

随机推荐

  • linux中解压tar.gz或zip类型的文件到具体文件夹

    zip对应的解压缩命令为unzip 命令格式 unzip 选项 压缩包名 选项 d 指定解压缩位置 示例 unzip d tmp test zip 将tar gz文件解压到指定的目录中 tar zxvf tmp tar gz C tmp 在
  • WEB常见的扫描器具体使用方法

    常用的WEB扫描器 1 awvs Acunetix Web Vulnerability Scanner 简称AWVS 是一款知名的网络漏洞扫描工具 它通过网络爬虫测试你的网站安全 检测流行安全漏洞 现已更新到10 下载地址 链接 https
  • Cisco_路由器基础命令

    Cisco 路由器基础命令 1 接口描述 路由器F0 1 或S0 1 接口命名为ABC Router config interface fastEthernet 0 1 进入到接口fastEthernet 0 1 Router config
  • mysql基础查询

    mysql基础查询 进程的相关信息 查看information schema数据库中的PROCESSLIST表来获取正在执行的查询进程的信息 该表包含了当前连接到MySQL服务器的所有进程的相关信息 包括进程ID id 和进程名称 name
  • JavaScript 简介 及引用方式

    js的引用方式 3种 1 行内引用 通过在开标签中的事件属性引用js的函数 2 内部引用 通过在script标签中编写js代码使用 1 script标签可以写在页面任何位置 2 script标签通常使用在body中的最后 或者body的后面
  • csv怎么保存开头数字0_【EXCEL必知必会】大基本功[4]—分列以及CSV文件处理

    阅读全文大概需要4 5分钟 本文是专栏 Excel必知必会 的第四篇教程 如果想了解专栏内容规划 请参阅开篇 温馨提示 如果您已经特别熟悉Excel 大可不必再看这篇文章 或只挑选部分 文中对Excel的说明和操作基于Mac Excel20
  • Git的原理及使用

    一 简述 在Git出现之前 大部分公司还是用SVN进行项目管理的 这里来对比一下 集中式 SVN 集中式的版本控制系统都有一个单一的几种管理的服务器 保存所有文件的修订版本 而协同工作的人们都通过客户端连接到这台服务器 取出最新的文件或者提
  • linux基础课程2-----熟练使用Linux系统命令

    目录 一 系统信息类命令是对系统的各种信息进行显示和设置的命令 1 dmesg命令 2 free命令 3 cal命令 4 clock命令 二 熟练使用进程管理类命令 1 ps命令 2 pidof命令 3 kill命令 4 killall命令
  • 用xpath获取html源码

    from lxml import html import requests url http navi cnki net knavi JournalDetail GetArticleList year 2018 issue 04 pykm
  • C++设计模式_02_面向对象设计原则

    文章目录 1 面向对象设计 为什么 2 重新认识面向对象 3 面向对象设计原则 3 1 依赖倒置原则 DIP 3 2 开放封闭原则 OCP 3 3 单一职责原则 SRP 3 4 Liskov 替换原则 LSP 3 5 接口隔离原则 ISP
  • 「python」关于sympy的使用笔记

    关于sympy的使用笔记 这是一篇使用python的符号计算工具包的笔记 随本人使用情况更新 1 变量 sympy中的变量可分为两种 常数变量 一般变量 from sympy import t symbols t real True con
  • 面面俱到!涵盖Java所有核心技术,阿里新产2023版Java面试核心突击手册太全了!

    程序员面试背八股 可以说是现在互联网开发岗招聘不可逆的形式了 其中最卷的当属Java 网上动不动就是成千上百道的面试题总结 你要是都能啃下来 平时技术不是太差的话 面试基本上问题就不会太大 这时候尴尬的现象就出现了 虽然八股文背的好并不能代
  • OpenBSD 安装

    OpenBSD 被誉世上最安全的系统 OpenBSD有最前沿的安全技术 适合于做防火墙和分布式环境下的私有网络服务 OpenBSD组每6个月发布一个新的发行版 即每年的 月 日和11月1日发布 你可以在此找到关于开发周期的更多信息 Open
  • Redis缓存更新策略、详解并发条件下数据库与缓存的一致性问题以及消息队列解决方案

    0 前言 我们知道 缓存由于在内存中 数据处理速度比直接操作数据库要快很多 因此常常将数据先读到缓存中 再进行查询 更新等操作 但与之而来的问题就是 内存中的数据不仅没有持久化 而且需要保证redis和数据库中数据的一致性 针对这个问题 r
  • Matlab 如何绘制复杂曲线的包络线

    Matlab 如何绘制复杂曲线的包络线 http jingyan baidu com article aa6a2c14d36c710d4c19c4a8 html 如果一条曲线 比如声音波形 波动很大 曲折复杂 可以通过绘制包络线的方式使其更
  • C语言——通讯录的实现

    目录 创建项目环境 创建结构体 test c文件 创建通讯录 增加联系人 打印通讯录 删除指定联系人 查找联系人 更改联系人 排列通讯录 完善通讯录 代码 结语 创建项目环境 对于这个通讯录的实现 我们可以像写三子棋一样 怎样去思考 那首先
  • PageHelper的简单使用

    PageHelper是mybatis框架的一个插件 用于支持在mybatis执行分页操作 使用非常方便 在这儿写一下基本的使用 github文档地址 https github com pagehelper Mybatis PageHelpe
  • 解决 Android Studio 提示Untrusted Server's certificate 证书不可用( Server's certificate is not trusted )

    如图 一打开工程提示证书不可用 记录下问题 以便重复遇到 解决 点击android studio左上角的File gt Settings gt Tools gt Server Certificates gt Accept non trust
  • 处理高并发、高访问之Apache优化

    前言 项目100人同时访问 导致访问速度变慢 作为一个没有遇到过这种情况下的辕 在各种查阅资料后 先用删除日志更改日志输出的方法处理后 处理方法 修改Apache日志输出相关配置方法 暂时好缓 后来又出现变慢 在查阅各种博客后 发现一个处理
  • LeetCode-2341. 数组能形成多少数对【哈希表,计数】

    LeetCode 2341 数组能形成多少数对 哈希表 计数 题目描述 解题思路一 哈希表 将数组中的数加入哈希表中 若有两个相同的数就记录下来 并消去两个 最后只需遍历哈希表中置为1的个数即可 解题思路二 优化是 将a最后进行计算 即a