力扣(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;
    }
相关推荐
2401_892070983 小时前
顺序栈(动态数组实现) 超详细解析(C++ 语言 + 可直接运行)
数据结构·c++·顺序栈
卷福同学3 小时前
去掉手机APP开屏广告,李跳跳2.2下载使用
java·后端·算法
漫霂3 小时前
二叉树的翻转
java·数据结构·算法
语戚3 小时前
力扣 51. N 皇后:基础回溯、布尔数组优化、位运算全解(Java 实现)
java·算法·leetcode·力扣·剪枝·回溯·位运算
熊猫钓鱼>_>3 小时前
从零构建大模型可调用的Skill:基于Function Calling的完整指南
人工智能·算法·语言模型·架构·agent·skill·functioncall
py有趣3 小时前
力扣热门100题之螺旋矩阵
算法·leetcode
xiaoyaohou113 小时前
003、轻量化改进(一):网络剪枝原理与实战
算法·机器学习·剪枝
我是章汕呐4 小时前
政策评估的“黄金标准”:DID模型从原理到Stata实操
大数据·人工智能·经验分享·算法·回归
念恒123064 小时前
Linux初识
linux·服务器·c++
2301_822703204 小时前
光影进度条:鸿蒙Flutter实现动态光影效果的进度条
算法·flutter·华为·信息可视化·开源·harmonyos