leetcode-6125:相等行列对

简介: leetcode-6125:相等行列对

题目

题目连接

给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。

如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。

示例 1:

输入:grid = [[3,2,1],[1,7,6],[2,7,7]]
输出:1
解释:存在一对相等行列对:
- (第 2 行,第 1 列):[2,7,7]

示例 2:

输入:grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]]
输出:3
解释:存在三对相等行列对:
- (第 0 行,第 0 列):[3,1,2,2]
- (第 2 行, 第 2 列):[2,4,2,2]
- (第 3 行, 第 2 列):[2,4,2,2]

解题

方法一:编码成string+哈希

将水平方向,编码成string

将竖直方向,编程成string,

比如对于:

{
{1,11},
{11,1}
}

水平方向,可以编码为"#1#11"和"#11#1"

竖直方向,可以编码为"#1#11"和"#11#1"

因此只要记录在map中记录每种string出现的次数,后续让水平方向的string和竖直方向的string是都出现个数相乘。

(编码成string比较方便,编译提供了对string的哈希函数,如果是vector作为map的key,还要自定义哈希,比较麻烦)

class Solution {
public:
    int equalPairs(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        unordered_map<string,int> map_row;
        unordered_map<string,int> map_col;
        string row_str,col_str;
        for(int i=0;i<m;i++){
            row_str.clear();
            for(int j=0;j<n;j++){
                row_str+="#"+to_string(grid[i][j]);
            }
            map_row[row_str]++;
        }
        for(int i=0;i<n;i++){
            col_str.clear();
            for(int j=0;j<m;j++){
                col_str+="#"+to_string(grid[j][i]);
            }
            map_col[col_str]++;
        }
        int res=0;
        for(auto& it:map_row){
            if(map_col.count(it.first)){
                res+=it.second*map_col[it.first];
            }
        }
        return res;
    }
};
相关文章
|
8月前
|
算法
【每日一题Day229】LC2352相等行列对 | 哈希
【每日一题Day229】LC2352相等行列对 | 哈希
51 0
|
7月前
|
SQL JSON 关系型数据库
【Databend】行列转化:一行变多行和简单分列
【Databend】行列转化:一行变多行和简单分列
61 1
|
7月前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
8月前
2352.相等行列对
2352.相等行列对
41 0
|
人工智能 BI
牛客 序列排列1
牛客 序列排列1
71 0
|
8月前
|
Go C++ Java
C/C++每日一练(20230412) 二维数组找最值、排序
C/C++每日一练(20230412) 二维数组找最值、排序
72 0
C/C++每日一练(20230412) 二维数组找最值、排序
|
8月前
【每日一题Day207】LC1072按列翻转得到最大值等行数 | 逆向思维+哈希表+位运算
【每日一题Day207】LC1072按列翻转得到最大值等行数 | 逆向思维+哈希表+位运算
42 0
练习>>将一个三行三列的二维数组的行列交换
练习>>将一个三行三列的二维数组的行列交换
116 0
|
算法
数据结构与算法(六)排序 插入&希尔&归并
数据结构与算法(六)排序 插入&希尔&归并
113 0
|
存储 人工智能 搜索推荐
【八大数据排序法】合并排序法的图形理解和案例实现 | C++
排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则的数据按照递增或递减的方式重新进行排序。在如今的互联网信息时代,随着大数据和人工智能的发展,大型企业的数据库中有亿级的用户数据量。因此对其进行处理,排序算法也就成为了其中必不可缺的步骤之一。
144 0
【八大数据排序法】合并排序法的图形理解和案例实现 | C++