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

文章目录

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

1. 题目链接

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

2. 题目描述

给你一组多米诺骨牌 dominoes 。

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

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

3. 题目示例

示例 1 :

plain 复制代码
输入:dominoes = [[1,2],[2,1],[3,4],[5,6]]
输出:1

示例 2 :

plain 复制代码
输入:dominoes = [[1,2],[1,2],[1,1],[1,2],[2,2]]
输出:3

4. 解题思路

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

5. 题解代码

java 复制代码
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 <= b
            ans += cnt[a][b]++; // 将当前骨牌的计数加到ans中,并更新计数
        }
        
        return ans; // 返回等价骨牌对的总数
    }
}

6. 复杂度分析

  1. 时间复杂度 :
    • 遍历所有骨牌需要 O(n) 时间,其中 n 是骨牌的数量。
    • 每个骨牌的处理(标准化和计数更新)是 O(1) 操作。
    • 总时间复杂度为 O(n)。
  2. 空间复杂度 :
    • 使用了一个固定大小的二维数组 cnt,大小为 10x10,因此空间复杂度为 O(1)。
相关推荐
通信小呆呆29 分钟前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
笑容掩饰我的失落35 分钟前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black1 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_967979124 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔4 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆4 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac
老师我太想进步了20265 小时前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
希望我万事顺遂6 小时前
力扣hot100-滑动窗口最大值
数据结构·算法·leetcode
꧁细听勿语情꧂6 小时前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫6 小时前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode