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

思路分析

  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 的行)。
相关推荐
小O的算法实验室16 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生18 小时前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿18 小时前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz18 小时前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能18 小时前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****18 小时前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能18 小时前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能18 小时前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo18 小时前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ018 小时前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法