力扣-确定两个字符串是否接近

思路分析

  1. 统计每行的出现次数:将每行数组转换为「可哈希的键」(如字符串 / 列表),用哈希表记录每行出现的次数;
  2. 遍历每列匹配行:将每列数组转换为相同格式的键,去哈希表中查询该键的出现次数,累加所有匹配次数即为答案。

代码实现

java 复制代码
public int equalPairs(int[][] grid){
    int result = 0;
    Map<List<Integer>, Integer> map = new HashMap<>();
    // 保存所有的行
    for (int i = 0; i < grid.length; i++) {
        List<Integer> list = new ArrayList<>();
        for (int num = 0; num < grid[i].length; num++) {
            list.add(grid[i][num]);
        }
        map.put(list, map.getOrDefault(list, 0) + 1);
    }
    // 遍历所有的列
    for (int col = 0; col < grid[0].length; col++) {
        List<Integer> list = new ArrayList<>();
        for (int j = 0; j < grid.length; j++) {
            list.add(grid[j][col]);
        }
        result += map.getOrDefault(list, 0);
    }
    return result;
}

复杂度分析

  • 整体时间复杂度:O(n2)(最优,无法低于此复杂度,因为必须遍历所有行列元素);
  • 空间复杂度:O(n2)(最坏情况所有行都不同,哈希表存储 n 个长度为 n 的行)。
相关推荐
信奥卷王39 分钟前
[GESP202609 六级] 分树规划
算法
夏幻灵1 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG2 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
Navigator_Z3 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛3 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记3 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
浮链序4 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
小O的算法实验室4 小时前
IEEE TMC,面向异构物联网的多目标量子行为拓扑优化算法
算法
圣保罗的大教堂4 小时前
leetcode 301. 删除无效的括号 困难
leetcode