【leetcode】1512. 好数对的数目(简单)题解学习

题目描述:

给你一个整数数组 nums 。

如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。

返回好数对的数目。

示例 1:

输入:nums = [1,2,3,1,1,3]
输出:4
解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始

示例 2:

输入:nums = [1,1,1,1]
输出:6
解释:数组中的每组数字都是好数对

示例 3:

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

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

代码实现:

方法一:可以通过暴力枚举的方式来求解。可以使用两个嵌套的循环,外层循环枚举所有可能的位置 i,内层循环枚举 i 后面的位置 j,如果 nums[i] == nums[j],则说明找到了一组好数对,累加计数器即可

public int numIdenticalPairs(int[] nums) {int n = nums.length;int count = 0;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {if (nums[i] == nums[j]) {count++;}}}return count;
}

该方法的时间复杂度为 O(n^2),空间复杂度为 O(1)。

方法二:可以利用哈希表来记录每个数字出现的次数

具体步骤如下:

  1. 创建一个哈希表 map,用于记录数组中每个数字出现的次数。
  2. 遍历数组 nums,对于每个数字 num,将其在哈希表中对应的计数器加一。
  3. 遍历哈希表 map,对于每个数字出现的次数 count,好数对的数量为 count * (count - 1) / 2,将其累加到结果 ans 中。
  4. 返回结果 ans
public int numIdenticalPairs(int[] nums) {Map<Integer, Integer> map = new HashMap<>();int count = 0;for (int num : nums) {map.put(num, map.getOrDefault(num, 0) + 1);}for (int num : map.keySet()) {int freq = map.get(num);count += freq * (freq - 1) / 2;}return count;
}

这种方法的时间复杂度为 O(n),其中 n 是数组 nums 的长度。需要遍历两次数组,第一次遍历统计每个数字出现的次数,第二次遍历计算好数对的数量。空间复杂度为 O(n),用于存储哈希表。相较于暴力枚举的方法,这种方法的效率更高。

(第二种方法不是很能理解O.o...),

count += freq * (freq - 1) / 2;

这句代码的作用是计算出当前数字 num 的好数对数量,并将其累加到变量 count 上。

具体来说,如果一个数字在数组中出现了 freq 次,那么它可以组成的好数对数量为 freq * (freq - 1) / 2。这个公式的解释如下:

假设这个数字出现在数组中的位置分别为 i1, i2, ..., ifreq,那么它可以和其他数字组成的好数对数量就是

C(freq, 2) = freq! / (2! * (freq - 2)!) = freq * (freq - 1) / 2

其中 C(n, m) 表示从 n 个元素中选取 m 个元素的组合数。

因为一个数字出现 freq 次,所以它可以和其他任意一个相同的数字组成一组好数对,因此它能够组成的好数对数量就是 C(freq, 2)

最后,我们遍历哈希表中的每个数字,将它们的好数对数量相加得到总的好数对数量,即为变量 count 的值。

总之,这句代码的作用是将当前数字能够组成的好数对数量累加到计数器上。

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

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

相关文章

OSG程序如何适配在无显卡的Ubuntu系统中

最近&#xff0c;嵌入式机器需要搞一个使用OSG开发的程序&#xff0c;但是发现弄上去后&#xff0c;各种问题&#xff0c;非常头疼&#xff0c;所以我花费了很多时间去查阅资料&#xff0c;终于解决了这个问题&#xff0c;因此写一下博客&#xff0c;记录下这个问题&#xff0c…

linux中的gdb调试

gdb是在程序运行的结果与预期不符合时&#xff0c;可以使用gdb进行调试 注意&#xff1a;使用gdb调试时要在编译上加-g参数 gcc -g -c hello.c 启动gdb调试&#xff1a; gdb file 对gdb进行调试 设置运行参数&#xff1a; set args 可指定运行参数 show args 可以查…

React实例之完善布局菜单(二)

我们继续未完的课程。 我们已经设计完所有theme的有关逻辑和代码了。接下来就是菜单部分&#xff0c;首先&#xff0c;菜单分为菜单头和菜单列表&#xff0c;还有收缩模式和缩略模式。为配置能用化的考虑&#xff0c;我们在菜单配置方面采用了 Json 数组。而菜单本身的数据状态…

uniapp基于Android的环境保护环保商城系统生活垃圾分类 小程序_rsj68

本环境保护生活App是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了用户和管理员这两者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优化界面…

WPF布局面板

StackPanel StackPanel 是一种常用的布局控件,可以支持水平或垂直排列,但不会换行。当子元素添加到 StackPanel 中时,它们将按照添加的顺序依次排列。默认情况下,StackPanel 的排列方向是垂直的,即子元素将从上到下依次排列。可以使用 Orientation 属性更改排列方向。可以…

Apache POI与easyExcel:Excel文件导入导出的技术深度分析

在处理Excel文件时&#xff0c;Java开发者经常会面临多种选择&#xff0c;其中Apache POI和easyExcel是两个非常受欢迎的选择。这两个库都提供了强大的Excel文件处理功能&#xff0c;但在性能、内存使用、API设计以及扩展性方面有所不同。本文将深入分析Apache POI和easyExcel在…

开发中小程序遇到的问题总结

1. backdrop-filter样式的作用 backdrop-filter 是CSS中的一个属性&#xff0c;用于为元素的背景区域添加图形效果&#xff0c;如模糊或者颜色偏移。这个属性的使用需要满足一定的条件&#xff0c;即元素本身或者其背景至少部分必须是透明的&#xff0c;这样才能让附加的效果显…

Unity 通过配置文件生成代码

文章目录 示例1&#xff1a;基于ScriptableObject的配置生成类示例2&#xff1a;预制体路径列表生成加载代码示例3&#xff1a;动画剪辑生成动画控制器片段示例4&#xff1a;Excel配置表生成序列化类示例5&#xff1a;UI元素及其事件绑定生成代码 在Unity编辑器模式下&#xff…

【BBF系列协议】TR181-2 TR369的设备数据模型

针对CWMP端点和USP代理的TR-181设备数据模型 执行摘要 TR-181问题2定义了设备数据模型的版本2(设备:2)。设备:2数据模型适用于所有类型的TR-069或USP启用的设备,包括终端设备、住宅网关和其他网络基础设施设备。 本技术报告中定义的设备:2数据模型由一组数据对象组成,…

电商实战练习部署

基于阿里云ECS服务器实战部署 1 单架构部署方案 1.1 部署流程 传统方案 基于docker 2 持续集成&持续部署方案 随着软件开发复杂度的不断提高&#xff0c;团队开发成员间如何更好地协同工作以确保软件 开发的质量已经慢慢成为开发过程中不可回避的问题。互联网软件的开发…

护眼台灯有aaa级吗为什么?一文揭晓护眼台灯照度等级分类

尽管台灯是一个很成熟的行业&#xff0c;但却时不时也会冒出一些新的概念和名词。比如近些年的”AAA级”台灯&#xff0c;很频繁地出现在我们视野中。给人感觉似乎带”AAA级”的台灯&#xff0c;要比其他的强上一头。那到底是真是假呢&#xff1f; 一、护眼台灯有AAA级吗&…

字节跳动推出MagicVideo-V2超高清文生视频模型

&#x1f989; AI新闻 &#x1f680; 字节跳动推出MagicVideo-V2超高清文生视频模型 摘要&#xff1a;MagicVideo-V2是由字节跳动的研究人员开发的一种超高清文生视频模型。该模型在视频的高清度、润滑度、连贯性、文本语义还原等方面表现出色&#xff0c;比目前主流的文生视…

leetcode 1.两数之和(C++)DAY1(待补充哈希表法)

文章目录 1.题目描述示例提示 2.解答思路3.实现代码结果4.总结 1.题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&…

ffmpeg操作实战001:视频+音频文件融合

一、功能需求 把视频文件video.mp4 和音频文件audio.wav融合在一起&#xff0c;输出视频文件output.mp4 二、操作指令 ffmpeg -i video.mp4 -i audio.wav -c:v copy -map 0:v:0 -map 1:a:0 output.mp4 三、参数说明 ffmpeg: 这是用于执行FFmpeg命令行工具的命令。-i video…

04. 【Linux教程】安装 Linux 操作系统

通过前面的小节学习&#xff0c;我们已经对 Linux 操作系统有了简单的了解&#xff0c;同时也在 Windows 下安装了虚拟机软件 VMware &#xff0c;那么本节课我们就介绍下如何使用虚拟机软件安装 Linux 操作系统。 通过第一小节的学习我们知道 Linux 有很多的发行版本&#xf…

Spring Data JpaRepository数据库增、删、改、查接口快速实现

1. Controller&#xff08;EventController.java&#xff09; RestController RequestMapping("/Event") public class EventController {// 案件信息AutowiredEventRepository eventRepository;// 添加、编辑PostMapping("/addEvent")public ResponseObj…

工信部颁发的《计算机视觉处理设计开发工程师》中级证书

计算机视觉&#xff08;Computer Vision&#xff09;是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说&#xff0c;计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标&#xff0c;计算机视觉结合了图像处理、机器学习、模…

主从不一致解决方案

此方案重新实现主从,数据完全同步 1)进入主库数据库 mysql -uroot -proot 2) 在主库加锁,开启只读服务(保证没有新数据写入) flush tables with read lock; 3)在主库进行数据备份,把数据备份为.sql的文件 mysqldump -u登陆用户 -p登陆密码 --all-databases > my…

11.3 Web开发_JavaScript入门(❤❤❤)

11.3 Web开发_JavaScript入门 1. 简介1.1 JavaScript简介1.2 浏览器执行js1.3 js组成1.4 js书写位置2. 基础语法2.1 变量2.2 数据类型2.3 数据类型检测_typeof ❤❤2.4 NaN 和 isNaN2.5 数据类型相互转换3. 运算符及流程控制3.1 运算符3.2 流程控制1. 分支结构 if..

Python 连接 mysql 详解(mysql-connector-python)

文章目录 1 概述1.1 第三方库&#xff1a;mysql-connector-python1.2 可视化工具&#xff1a;navicat1.3 创建测试数据库 2 连接 mysql 数据库2.1 创建一个连接2.2 捕获连接异常2.3 从配置文件中获取连接信息 3 执行 sql 语句3.1 插入、更新、删除3.2 查询 1 概述 1.1 第三方库…