欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 1128. 等价多米诺骨牌对的数量

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

2025/5/9 13:16:47 来源:https://blog.csdn.net/apple_74262176/article/details/147786530  浏览:    关键词:1128. 等价多米诺骨牌对的数量

文章目录

      • 1. 题目链接
      • 2. 题目描述
      • 3. 题目示例
      • 4. 解题思路
      • 5. 题解代码
      • 6. 复杂度分析

1. 题目链接


1128. 等价多米诺骨牌对的数量 - 力扣(LeetCode)

2. 题目描述


给你一组多米诺骨牌 dominoes

形式上,dominoes[i] = [a, b]dominoes[j] = [c, d] 等价 当且仅当 (a == cb == d) 或者 (a == db == c) 。即一张骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌。

0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i]dominoes[j] 等价的骨牌对 (i, j) 的数量。

3. 题目示例


示例 1 :

输入:dominoes = [[1,2],[2,1],[3,4],[5,6]]
输出:1

示例 2 :

输入:dominoes = [[1,2],[1,2],[1,1],[1,2],[2,2]]
输出:3

4. 解题思路


  1. 问题理解
    • 给定一组多米诺骨牌,每个骨牌由两个数字表示,如 [a, b]
    • 两个骨牌 [a, b][c, d] 是等价的,如果 a == c && b == da == d && b == c
    • 需要统计所有等价骨牌对的数量。
  2. 关键思路
    • 将每个骨牌标准化为 [min(a, b), max(a, b)],这样可以统一等价骨牌的表示形式。
    • 使用一个二维数组 cnt 来统计每种标准化骨牌的出现次数。
    • 对于每个骨牌,其等价对的数量就是之前已经出现的相同标准化骨牌的数量。
  3. 优化点
    • 标准化处理避免了重复比较,直接通过计数数组快速查询和更新。
    • 时间复杂度为 O(n),空间复杂度为 O(1)(因为 cnt 的大小固定为 10x10)。

5. 题解代码


class Solution {public int numEquivDominoPairs(int[][] dominoes) {int ans = 0; // 初始化等价骨牌对的数量int[][] cnt = new int[10][10]; // 创建一个10x10的计数数组,用于统计每种骨牌的出现次数for (int[] d : dominoes) { // 遍历每个骨牌int a = Math.min(d[0], d[1]); // 获取骨牌中的较小值int b = Math.max(d[0], d[1]); // 获取骨牌中的较大值,保证a <= bans += cnt[a][b]++; // 将当前骨牌的计数加到ans中,并更新计数}return ans; // 返回等价骨牌对的总数}
}

6. 复杂度分析


  1. 时间复杂度
    • 遍历所有骨牌需要 O(n) 时间,其中 n 是骨牌的数量。
    • 每个骨牌的处理(标准化和计数更新)是 O(1) 操作。
    • 总时间复杂度为 O(n)
  2. 空间复杂度
    • 使用了一个固定大小的二维数组 cnt,大小为 10x10,因此空间复杂度为 O(1)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词