当前位置: 首页 > ds >正文

好数对的数目

题目描述
给你一个整数数组 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

思路与解法
这道题目要求我们找出满足 nums[i] == nums[j] 且 i < j 的所有数对。对于每个出现过的数,我们可以利用哈希表来统计它出现的次数,然后通过组合的方式计算好数对的数量。

假设某个数出现了 k 次,那么从中任选两个位置作为数对的数量就是 C(k, 2) = k * (k - 1) / 2。我们可以通过统计每个数的出现次数来逐步累加好数对的数量。

代码实现
python
复制
编辑
from collections import defaultdict
from typing import List

class Solution:
def numIdenticalPairs(self, nums: List[int]) -> int:
res = 0
cnt = defaultdict(int)

    # 遍历数组,统计每个数字出现的次数for x in nums:res += cnt[x]cnt[x] += 1return res

代码解释
哈希表 cnt:用于统计每个数字出现的次数。

累加好数对:每次遇到一个数字 x,我们增加 cnt[x],表示当前数字 x 之前已经出现了多少次。然后更新 cnt[x] 的次数。

返回结果:返回最终的好数对数量。

时间复杂度
时间复杂度为 O(n),其中 n 是数组 nums 的长度。我们遍历一次数组并进行常数时间的哈希操作。

http://www.xdnf.cn/news/102.html

相关文章:

  • 【系统分析师】-软件工程
  • 2025mathorcup妈妈杯数学建模挑战赛B 题:音智策引迁程,老城焕新颜,思路,模型,代码,持续更新中
  • 【文件操作与IO】详细解析文件操作与IO (一)
  • 15 nginx 中默认的 proxy_buffering 导致基于 http 的流式响应存在 buffer, 以 4kb 一批次返回
  • VUE3多国语言切换(国际化)
  • 数据结构初阶:二叉树(二)
  • 【MySQL数据库入门到精通】
  • 考研系列-计算机网络-第二章、物理层
  • C++_设计模式\_观察者模式(Observer Pattern)
  • .NET Core 服务实现监控可观测性最佳实践
  • 5.0.2 颜色16进制格式含义 控件template中path的使用
  • 微服务架构基础知识
  • ICPR-2025 | 让机器人在未知环境中 “听懂” 指令精准导航!VLTNet:基于视觉语言推理的零样本目标导航
  • 插入排序和希尔排序
  • R 语言科研绘图 --- 饼状图-汇总
  • 磁流变式汽车减振器创新设计与关键技术研究
  • OpenCV 中的分水岭算法的原理及其应用---图像分割的利器
  • 小红书爬虫,小红书api,小红书数据挖掘
  • 【go】什么是Go语言的GPM模型?工作流程?为什么Go语言中的GMP模型需要有P?
  • 【数据结构与算法】——插入排序
  • 深度监听 ref 和 reactive 的区别详解
  • python面向对象实现学员信息管理系统详解
  • 滑动窗口209. 长度最小的子数组
  • 如何避免被目标网站识别为爬虫?
  • 长亭2月公开赛Web-ssrfme
  • 在没有第三方库的情况下使用 Python 自带函数解码
  • 递归函数详解
  • 力扣刷题-热题100题-第35题(c++、python)
  • StarRocks Community Monthly Newsletter (Mar)
  • nginx-基础知识(一)