当前位置: 首页 > 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)})。

学习

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

相关文章:

  • 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说明
  • 经济日报:以人工智能激活产业新增长
  • 2025五一档电影票房破6亿
  • 世锦赛决赛今夜打响,斯诺克运动需要赵心童创造历史
  • 一金两银一铜!中国田径从柯桥望向世界大赛
  • 融创中国清盘聆讯延至8月25日,清盘呈请要求遭到部分债权人反对
  • 对华小额包裹免税取消=更高价格+更慢物流,美消费者为关税政策买单