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

好数对的数目

题目描述
给你一个整数数组 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 的长度。我们遍历一次数组并进行常数时间的哈希操作。

相关文章:

  • MySQL事务详解
  • C#如何动态生成实体类?5种方法详解与实战演示
  • 《TIME-LLM: TIME SERIES FORECASTINGBY REPROGRAMMING LARGE LANGUAGE MODELS》
  • 51单片机实验三:数码管动态显示
  • 游戏引擎学习第233天
  • 基于Redis的4种延时队列实现方式
  • AI数据分析与BI可视化结合:解锁企业决策新境界
  • HTML新标签与核心 API 实战
  • 杂记-LeetCode中部分题思路详解与笔记-HOT100篇-其四
  • LVGL学习(二)——控件
  • ArcPy工具箱制作(下)
  • 【Hot100】41. 缺失的第一个正数
  • 轻量还是全量?Kubernetes ConfigMap 与专业配置中心的抉择
  • 每日一题(8) 求解矩阵最小路径和问题
  • Debian服务器环境下env变量丢失怎么办
  • yocto编译使用共享缓存
  • gbdt总结
  • Mac 选择下载安装工具 x86 还是 arm64 ?
  • Git学习之路(Updating)
  • 多模态大语言模型arxiv论文略读(二十六)
  • 特朗普就防卫负担施压日本,石破茂:防卫费应由我们自主决定
  • 观察丨微短剧盛行“拿来主义”,版权保护迫在眉睫
  • 寒武纪一季度营收猛增42倍,净利3.55亿元,连续两个季度盈利
  • 上海召开全市加强社会治安综合治理中心规范化建设工作推进会
  • 刘国梁:奥运会乒乓球项目增至六金,国乒机遇与挑战并存
  • 江西南昌:千年银杏树倒伏,全力抢救进行时​