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

思路分析

  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 的行)。
相关推荐
不会就选b10 小时前
算法日常・每日刷题--<贪心>17
算法
yuanxi20010 小时前
上药集团药品销售公司签署沪明医疗数链协议:PSS⁵视角下的跨区域数据合作机会
职场和发展·创业创新·学习方法
随便发挥12 小时前
Leetcode 剑指 Offer II 186. 文物朝代判断
leetcode
6Hzlia13 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
有点。19 小时前
C++03阶段练习(练习题)
数据结构·算法·图论
周末也要写八哥20 小时前
经典算法实例:游戏中弱角色的数量(二)
算法
是Yu欸21 小时前
鸿蒙PC移植:2048 从网页小游戏到 AI 桌面应用
大数据·人工智能·算法·数据挖掘·openharmony·codex
鹿角片ljp21 小时前
KV Cache 解析
java·算法
liliangcsdn21 小时前
IVOL与偏度因子的对比测量分析
算法
threerocks1 天前
Jev 入门第一课
算法