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

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.xdnf.cn/news/3801.html

相关文章:

  • 架构思维:利用全量缓存架构构建毫秒级的读服务
  • 2001-2023年 上市公司-企业广告支出数据-社科数据
  • 使用宝塔面板、青龙面板实现定时推送功能
  • 【数据结构】稀疏矩阵的快速转置
  • 单细胞测序数据分析试验设计赏析(二)
  • Android 输入控件事件使用示例
  • 信息系统监理师第二版教材模拟题第一组(含解析)
  • HTML学习笔记(7)
  • PostgreSQL 的 ANALYZE 命令
  • PostgreSQL 查看索引碎片的方法
  • 论文阅读笔记——STDArm
  • PostgreSQL 判断索引是否重建过的方法
  • 4电池_基于开关电容的均衡
  • Ubuntu 系统上广受好评的浏览器推荐
  • 蘑菇管理——AI与思维模型【94】
  • 【翻译、转载】使用 LLM 构建 MCP
  • 【五一培训】Day 3
  • 机器学习+多目标优化的算法如何设计?
  • AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用
  • 位图的实现和拓展
  • P1603 斯诺登密码详解
  • 【项目篇之统一内存操作】仿照RabbitMQ模拟实现消息队列
  • Android运行时ART加载类和方法的过程分析
  • Python-Django系列—视图
  • 8.2 GitHub企业级PDF报告生成实战:ReportLab高级技巧与性能优化全解析
  • BUUCTF——Fake XML cookbook
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的爆品力构建研究
  • mysql-内置函数,复合查询和内外连接
  • Axure打开html文件失败,解决方案:
  • 外观模式(Facade Pattern)