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

LeetCode每日一题5.4

1128. 等价多米诺骨牌对的数量

问题

在这里插入图片描述

问题分析

等价的定义为:两个骨牌 [a, b] 和 [c, d] 等价,当且仅当 (a == c 且 b == d) 或者 (a == d 且 b == c)。

思路

标准化骨牌表示:
为了方便比较,我们可以将每个骨牌 [a, b] 标准化为 [min(a, b), max(a, b)]。这样可以确保 [a, b] 和 [b, a] 都表示为相同的形式。
计数标准化后的骨牌:
使用一个字典来记录每个标准化后骨牌的出现次数。
计算等价骨牌对数量:
对于每个标准化骨牌,如果其出现次数为 n,则可以形成 C(n, 2) = n * (n - 1) / 2 个等价骨牌对。

代码

class Solution:def numEquivDominoPairs(self, dominoes: List[List[int]]) -> int:# 字典用于记录标准化骨牌的出现次数count = {}result = 0for domino in dominoes:# 标准化骨牌standardized_domino = tuple(sorted(domino))# 更新字典中的计数if standardized_domino in count:count[standardized_domino] += 1else:count[standardized_domino] = 1# 计算等价骨牌对的数量for value in count.values():if value > 1:result += value * (value - 1) // 2return result

复杂度分析

时间复杂度
标准化骨牌:对于每个骨牌,标准化操作(排序)的时间复杂度为 (O(1))(因为每个骨牌只有两个元素)。
遍历骨牌数组:时间复杂度为 (O(n)),其中 (n) 是骨牌数组的长度。
更新字典:每次更新操作的时间复杂度为 (O(1))。
计算等价骨牌对:遍历字典值并计算组合数,时间复杂度为 (O(m)),其中 (m) 是不同标准化骨牌的数量。
因此,整体时间复杂度为 (O(n)),其中 (n) 是骨牌数组的长度。
空间复杂度
字典存储:空间复杂度为 (O(m)),其中 (m) 是不同标准化骨牌的数量。
综上所述,该算法的时间复杂度为 (\boxed{O(n)}),空间复杂度为 (\boxed{O(m)})。

学习

遍历骨牌数组,对每个骨牌进行标准化。
使用字典记录 每个标准化骨牌的出现次数。
根据字典中的值,计算等价骨牌对的数量。

http://www.dtcms.com/a/171076.html

相关文章:

  • C++多态(上)
  • Java面试大纲(以及常见面试问答)
  • 如何查看电脑IP地址和归属地:全面指南
  • 强化学习机器人模拟器——RobotApp:一个交互式强化学习模拟器
  • Dify框架面试内容整理-Dify部署后常见问题有哪些?如何排查?
  • 【循环依赖(Circular Dependency)】
  • C++多态(下)
  • 自监督学习(Self-supervised Learning)李宏毅
  • 第十章.XML
  • langchain中 callbacks constructor实现
  • devtmpfs_create_node
  • WPF中Binding
  • 判断声音“混”的原因
  • 委托构造函数是什么?
  • C++基础算法:Dijkstra
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段(1):语法单词
  • MCP协议与Dify集成教程
  • 【翻译、转载】【转载】LLM 的函数调用与 MCP
  • 探索大语言模型(LLM):Qwen3速测指南(transformers调用)
  • 平台介绍-开放API接口-IO说明
  • SpringAi接入DeepSeek大模型
  • FreeSwitch Windows安装
  • node.js为什么产生?
  • 双列集合——map集合和三种遍历方式
  • Java学习手册:SQL 优化技巧
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.1 日期时间标准化(时区转换/格式统一)
  • SpringMVC——第四章:三个域对象
  • MATLAB中tabulate函数——先验概率的简单估计
  • 【Redis】Java操作Redis之SpringDataRedis
  • 高并发?多线程?是一个东西吗?