Leetcode #311:稀疏矩阵乘法

C++ 使用哈希表的思想完成稀疏矩阵乘法 题设 要求构建一种数据结构,完成稀疏矩阵乘法。 思路 采用了普遍使用的三元组思路,由于看网上实现的方法感觉略复杂,便想自己用易懂的方式自己写一遍。 构建的数据结构为,结构体sparse_node,表示矩阵中不为0的点。结构体sparse_mat,内部放置sparse_node以及行数和列数。 #include <iostream> #include <vecto... 阅读详情

Leetcode #311:稀疏矩阵乘法

题目

题干

该问题稀疏矩阵乘法 题面:

Given two sparse matrices A and B, return the result of AB.

给你两个 稀疏矩阵 A 和 B,请你返回 AB 的结果。
你可以默认 A 的列数等于 B 的行数。

示例

输入:
A = [[1,0,0],[-1,0,3]]
B = [[7,0,0],[0,0,0],[0,0,1]]
输出:
[[7,0,0], [-7,0,3]]

题解

由于是稀疏数组可以只计算非零数字。

将A矩阵转存为hashmap,然后对每一个非零数遍历B的列数来更新它在ans矩阵里可以被用到的位置。

C++

class Solution {
public:
    vector<vector<int>> multiply(vector<vector<int>>& A, vector<vector<int>>& B) {
        int n = A.size(), m = A[0].size(), k = B[0].size();
        vector<vector<int>> res(n, vector<int>(k, 0));
        unordered_map<int, int> am;
        //存储A的非零元素
        for (int i = 0; i < n; i ++)
            for (int j = 0; j < m; j ++)
            {
                if (!A[i][j]) continue;
                int idx = i * m + j;
                am[idx] = A[i][j];
            }
        for (auto aij : am)
        {
            int va = aij.second, aidx = aij.first, ai = aidx / m, aj = aidx % m;
            for (int j = 0; j < k; j ++)
            {
                res[ai][j] += va * B[aj][j];
            }
        }
        return res;
    }
};

Python

class Solution:
    def __init__(self,A,B) -> None:
        self.a = A
        self.b = B

    def multiply(self):
        am = {}
        n = len(self.a)
        m = len(self.a[0])
        k = len(self.b[0])
        res = []
        #存储A的非零元素
        for i in range(n):
            res = res+[[0]*k]
        for i in range(n):
            for j in range(m):
                if self.a[i][j] == 0:
                    continue
                idx = i * m + j
                am[idx] = self.a[i][j]
        for aidx, va in am.items():
            ai = aidx // m
            aj = aidx % m
            for j in range(k):
                res[ai][j] += va * self.b[aj][j]
        return res
【LeetCode】311. 稀疏矩阵的乘法 本题是 LeetCode 会员才能看… 一、题目描述 给你两个 稀疏矩阵 A 和 B,请你返回 AB 的结果。 你可以默认 A 的列数等于 B 的行数。 请仔细阅读下面的示例。 示例: 输入: A = [ [ 1, 0, 0], [-1, 0, 3] ] B = [ [ 7, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 1 ] ] 输出: | 1 0 0 | | 7 0 0 | | 7 0 0 | AB = | -1 0 3 | x | 0 0 0 | 阅读详情

相关推荐

Leetcode 311. Sparse Matrix Multiplication (python)

Leetcode 311. Sparse Matrix Multiplication题目解法:暴力解法2: 题目 解法:暴力 这边主要讲一下怎么做矩阵乘法。假设我们有矩阵A,B,结果是C,那么 C[i][k] += A[i][j]*B[j][k] 从矩阵乘法的维度变化来考虑就可以理解了。 遍历的顺序不重要,下面几种都是ok的 class Solution: def multiply(self, A: List[List[int]], B: List[List[int]]) -> List[

qq_37821701的博客 1357

leetcode:311. 稀疏矩阵相乘

首先,两个矩阵要是想相乘需要满足,第一个矩阵的列数等于第二个矩阵的行数,满足的话就可以相乘得到新的矩阵了。p的矩阵相乘,将会得到一个m*p的矩阵。首先要知道矩阵是怎么相乘的。

OceanStar的博客 2881

从LeetCode真题反推:如何用串和矩阵压缩思想优化算法(Python/Java实现)

本文通过LeetCode真题解析,详细介绍了如何利用字符串匹配算法(如KMP)和矩阵压缩技术优化算法性能。文章提供了Python和Java的代码实现,对比了不同算法的效率,并探讨了语言级优化技巧,帮助开发者在编程面试和竞赛中提升解题效率。

weixin_29280219的博客 95

Leetcode_Weekly_311

就写写hello world

小学生高某的博客 456

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

关于Nuttx操作系统

NuttX是一个成熟的实时操作系统

qq_28576837的博客 4092

leetcode311.稀疏矩阵的乘法

1.题目描述 给定两个稀疏矩阵A和B,请你返回AB。你可以默认A的列数等于B的行数。 请仔细阅读下面的示例。 示例: 输入: A = [ [ 1, 0, 0], [-1, 0, 3] ] B = [ [ 7, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 1 ] ] 输出: | 1 0 0 | | 7 0...

没有感情的刷题机器 1104

DC/DC恒压输出控制原理与应用

DC/DC恒压输出控制

propor的专栏 4280

leetcode 311. 稀疏矩阵的乘法

矩阵乘,按照definition来就可以

邹九的个人博客 372

电力现货交易市场-报价方式

电是一种能源,也是一种商品,既然是商品自然可以在市场中进行自由交易。

qq_38225433的博客 5118

C语言 在合并编译 ( 多.c文件 ) 情况下 实现 linked list ( 链表 ) 教程 . 更新ing

写在前面  依旧是参考借鉴了 浙江大学 温老师 的视频教程,很不错,在中国大学MOOC上,强力推荐!  虽说有借鉴,但是能保证的是每一行代码都是我自己经过理解后手敲出来的,所以才来做了这部分的教程。  最后,带 * 字符是我个人觉得可以添加的功能,按理来讲是可以不看的,而且大概率是可以有更好的改进的。  PS: 文章还在更新,如果文字蓝了(有超链接),说明写完了,如果没蓝,说明我在开军舰.jpg 源代码:  这里→源代码. 第一步:前置工作  先说一下每一篇都会出现 main 函数的,stage1 只是给没

weixin_47287635的博客 526

LeetCode第311题_稀疏矩阵的乘法

本文解析LeetCode第311题"稀疏矩阵乘法",提供优化解法避免无效计算。通过预处理存储非零元素位置,利用哈希表或列表记录非零值,仅在必要位置进行乘法运算。文章包含C#、Python、C++三种实现,均采用稀疏矩阵优化策略,时间复杂度优于传统O(n³)方法,为O(k₁k₂n),其中k为非零元素数。图解详细展示了优化思路和计算过程,适合想提升矩阵运算效率的开发者学习。

qq_40263592的博客 1859

数字IC/FPGA 秋招知识点不全面整理

数字IC/FPGA 秋招知识点不全面整理

w0shishabi的博客 7866

Leetcode 311 Sparse Matrix Multiplication 稀疏矩阵相乘

Given two sparse matrices A and B, return the result of AB.You may assume that A’s column number is equal to B’s row number.Example: Solution Transform B into defaultdict(dict) GPU Solution,来自DeepSeek的总结 根据2025年最新研究进展,GPU处理稀疏矩阵乘法(SpMM/SparseGEMM)的主流算子可分

taoqick的专栏 1259

华为OD机试 - 素数之积 - 数学问题(Java 2025 A卷 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2133

分布式计算Ray框架:从入门到精通完全教程

想象一下,你有一个机器学习模型要训练,数据集大到让你的笔记本电脑直冒烟;或者你需要并行跑几百个爬虫任务,但线程池和多进程搞得你头晕眼花。传统的单机计算已经hold不住这些场景,分布式计算应运而生。然而,传统的分布式框架(如Hadoop、Spark)要么配置复杂,要么对动态任务支持不佳。这时候,Ray闪亮登场!Ray是一个开源的分布式计算框架,专为高性能、灵活性和易用性而生。它最初由UC Berkeley的RISELab团队开发,目标是让开发者用最少的代码实现分布式任务。无论是数据处理、机器学习,还是仿真任务

大模型大数据攻城狮的专栏 1318

Leetcode 刷题 - 311 - Sparse Matrix Multiplication

Given two sparse matrices A and B, return the result of AB. You may assume that A's column number is equal to B's row number. Example: A = [ [ 1, 0, 0], [-1, 0, 3] ] B = [ [ 7, 0, 0 ],

607

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LeetCode #311 - Sparse Matrix Multiplication

题目描述: Given two sparse matrices A and B, return the result of AB. You may assume that A's column number is equal to B's row number. Example: Input: A = [   [ 1, 0, 0],   [-1, 0, 3] ] B = [  ...

LawFile的博客 301

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[LeetCode] 311. Sparse Matrix Multiplication 稀疏矩阵相乘

Given twosparse matricesAandB, return the result ofAB. You may assume thatA's column number is equal toB's row number. Example: A = [ [ 1, 0, 0], [-1, 0, 3] ] B = [ [ 7, 0, 0 ],...

weixin_30920853的博客 231

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

leetcode - 311. Sparse Matrix Multiplication

leetcode - 311

sinat_41679123的博客 284

哈希算法 leetcode 总结

哈希 我的答案 题号 题目 通过率 难度 总结 掌握 #1 两数之和 47.9% 简单 #3 无重复字符的最长子串 33.4% 中等 ...

us2019的博客 687

矩阵算法面试全攻略:从遍历到动态规划

矩阵作为二维数据结构在算法面试中占据核心地位,其操作涉及空间复杂度优化、边界条件处理等关键编程能力。从基础概念看,矩阵遍历存在螺旋、对角线、旋转等经典模式,每种模式对应特定的坐标映射规律。技术价值上,掌握这些模式能高效解决LeetCode高频题型如矩阵搜索、岛屿问题等实际场景。特别在动态规划应用中,矩阵路径类问题通过状态转移方程展现算法威力。本文以螺旋遍历和岛屿DFS为例,结合方向数组等工程实践技巧,系统梳理矩阵问题的解题框架与优化方法。

weixin_34252686的博客 373

Leetcode 311- 稀疏矩阵的乘法

给你两个 稀疏矩阵 A 和 B,请你返回 AB 的结果。你可以默认 A 的列数等于 B 的行数。 请仔细阅读下面的示例。 题解 题解转载自klb 法一. 直接按照矩阵乘法的定义来就行 class Solution { public int[][] multiply(int[][] A, int[][] B) { int[][] C = new int[A.length][B[0].length]; for(int i=0;i<A.length;i++)

Helene1996的博客 798

LeetCode 311. 稀疏矩阵的乘法

文章目录1. 题目2. 解题2.1 暴力求解2.2 选取都不为0的行和列相乘 1. 题目 给你两个 稀疏矩阵 A 和 B,请你返回 AB 的结果。 你可以默认 A 的列数等于 B 的行数。 请仔细阅读下面的示例。 示例: 输入: A = [ [ 1, 0, 0], [-1, 0, 3] ] B = [ [ 7, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 1 ] ] 输出: | 1 0 0 | | 7 0 0 | | 7 0 0 | AB = | -1

Michael是个半路程序员 3603

LeetCode 311. Sparse Matrix Multiplication(稀疏矩阵相乘)

原题网址:https://leetcode.com/problems/sparse-matrix-multiplication/ Given two sparse matrices A and B, return the result of AB. You may assume that A's column number is equal to B's row number.

James Pan 3048

【LeetCode - 311】稀疏矩阵的乘法

【中等】数学、哈希表

学哥斌的博客 701
上一篇: Gitlab权限
下一篇: Leetcode #310:最小高度树
wq_0708
博客等级 码龄6年 2万+粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值