力扣(LeetCode)算法_C++——稀疏矩阵的乘法

给定两个 稀疏矩阵 :大小为 m x k 的稀疏矩阵 mat1 和大小为 k x n 的稀疏矩阵 mat2 ,返回 mat1 x mat2 的结果。你可以假设乘法总是可能的。

示例 1:

输入:mat1 = [[1,0,0],[-1,0,3]], mat2 = [[7,0,0],[0,0,0],[0,0,1]]

输出:[[7,0,0],[-7,0,3]]

示例 2:

输入:mat1 = [[0]], mat2 = [[0]]

输出:[[0]]

cpp 复制代码
    vector<vector<int>> multiply(vector<vector<int>>& mat1, vector<vector<int>>& mat2) {
        int m = mat1.size();
        int k = mat1[0].size();
        int n = mat2[0].size();
        unordered_map<int, list<pair<int, int>>> map1;
        unordered_map<int, list<pair<int, int>>> map2;
        
        for (int i {0}; i < m; i++) {
            for (int j {0}; j < k; j++) {
                if (mat1[i][j] != 0) map1[mat1[i][j]].push_back(make_pair(i, j));
            }
        }        
        
        for (int i = 0; i < k; i++) {
            for (int j = 0; j < n; j++) {
                if (mat2[i][j] != 0) map2[mat2[i][j]].push_back(make_pair(i, j));
            }
        }

        vector<vector<int>> res(m, vector<int>(n, 0));
        if (m == 0 || n == 0) return res;

        for (auto& element1 : map1) {
            for (auto& list_node1 : element1.second) {
                for (auto& element2 : map2) {
                    for (auto& list_node2 : element2.second) {
                        if (list_node1.second == list_node2.first) {
                            res[list_node1.first][list_node2.second] += element1.first * element2.first;
                        }
                    }
                }
            }
            
        }

        return res;
    }
相关推荐
Jasmine_llq几秒前
《 火星人 》
算法·青少年编程·c#
闻缺陷则喜何志丹12 分钟前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
charlie11451419123 分钟前
C++ STL CookBook
开发语言·c++·stl·c++20
Lenyiin30 分钟前
01.02、判定是否互为字符重排
算法·leetcode
小林熬夜学编程34 分钟前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
倔强的石头1061 小时前
【C++指南】类和对象(九):内部类
开发语言·c++
鸽鸽程序猿1 小时前
【算法】【优选算法】宽搜(BFS)中队列的使用
算法·宽度优先·队列
Jackey_Song_Odd1 小时前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
乐之者v1 小时前
leetCode43.字符串相乘
java·数据结构·算法