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

输出:

方法1:
主要思路:
(1)直接模拟矩阵的乘法,计算出结果即可;

class Solution {public:vector<vector<int>> multiply(vector<vector<int>>& A, vector<vector<int>>& B) {vector<vector<int>> res(A.size(),vector<int>(B[0].size()));//定义需要的特定大小的矩阵//实现矩阵的乘法for(int i=0;i<A.size();++i){for(int j=0;j<B[0].size();++j){for(int k=0;k<A[0].size();++k){res[i][j]+=A[i][k]*B[k][j];}}}return res;}
};

方法2:
主要思路:
(1)既然稀疏矩阵中的大部分元素是0,而0的乘法是可以忽略的,故可以先对两个数组中的非零元素进行统计,获得非零元素的位置,然后再在乘法中,只处理这些非零元素即可;

class Solution {public:vector<vector<int>> multiply(vector<vector<int>>& A, vector<vector<int>>& B) {vector<vector<int>> res(A.size(),vector<int>(B[0].size()));//统计数组A中的非零元素vector<vector<int>> A_tmp(A.size());for(int i=0;i<A.size();++i){for(int j=0;j<A[0].size();++j){if(A[i][j]){A_tmp[i].push_back(j);}}}//统计数组B中的非零元素vector<vector<int>> B_tmp(B[0].size());for(int i=0;i<B[0].size();++i){for(int j=0;j<B.size();++j){if(B[j][i]){B_tmp[i].push_back(j);}}}//处理矩阵的乘法for(int i=0;i<A.size();++i){for(int j=0;j<B[0].size();++j){//使用非零元素较少的数组来实现乘法if(A_tmp[i].size()<B_tmp[j].size()){for(int&k:A_tmp[i]){res[i][j]+=A[i][k]*B[k][j];}}else{for(int&k:B_tmp[j]){res[i][j]+=A[i][k]*B[k][j];}}}}//返回结果return res;}
};

311 稀疏矩阵的乘法相关推荐

  1. LeetCode 311. 稀疏矩阵的乘法

    文章目录 1. 题目 2. 解题 2.1 暴力求解 2.2 选取都不为0的行和列相乘 1. 题目 给你两个 稀疏矩阵 A 和 B,请你返回 AB 的结果. 你可以默认 A 的列数等于 B 的行数. 请 ...

  2. 西工大NOJ数据结构实验——实验 2.4稀疏矩阵的乘法

    然后呢,对于这道题,有2点要注意: 1.在Sample Input和Sample Output中,所有的"?"都是因为格式问题,让空格转成了"?",所以我们在程 ...

  3. leetcode刷题目录总结

    题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...

  4. Leetcode题目分类指南(单独刷题或学习算法书籍配合使用)

    Leetcode题目分类指南 笔者在学习<算法导论>同时,希望能够配合Leetcode的题目进行分类模块化练习,该分类为笔者自己根据做题学习经验,结合<算法导论>的内容,给出L ...

  5. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  6. 【Scala-spark.mlib】本地矩阵乘法计算效率比较(稠密稀疏哪家强?)

    矩阵乘法效率比较 1. 矩阵乘法 2. 效率比较  2.1. DenseMatrix(50% zeros) X DenseMatrix  2.2. SparseMatrix X DenseMatrix ...

  7. 基于稀疏矩阵的k近邻(KNN)实现

    基于稀疏矩阵的k近邻(KNN)实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 元旦了!要跨入2015了!呵呵,忙了挺久,没有更新博客了,博客也悄悄地蒙上了 ...

  8. 稀疏矩阵的加,减,乘,转置

    1 需求分析 稀疏矩阵是指哪些多元素为零的矩阵.利用"稀疏的特点"进行储存和计算可以打打节省储存空间,提高计算效率.实现一个能进行稀疏矩阵基本运算的运算器. 以"带行逻辑 ...

  9. 稀疏矩阵 c语言,C语言数据结构 稀疏矩阵

    <C语言数据结构 稀疏矩阵>由会员分享,可在线阅读,更多相关<C语言数据结构 稀疏矩阵(4页珍藏版)>请在人人文库网上搜索. 1.实验十 稀疏矩阵#include #defin ...

最新文章

  1. 开发健壮的企业级应用的研究
  2. 若依微服务版手把手教你本地搭建环境并运行前后端项目
  3. C/C++:程序的内存分配方式
  4. Postgresql快速写入\/读取大量数据(.net)
  5. java web登录状态保持_java web用于保持状态的4种方法
  6. 网络爬虫--1.通用爬虫和聚焦爬虫
  7. centos7 搭建keepalived+Nginx+tomcat
  8. 厚积薄发 前端学习笔记 CSS基础篇-左侧固定,右侧自适应(或右侧固定,左侧自适应)布局方法...
  9. tps波动很大的原因_期货揭秘:价格的波动规律(2)
  10. 华为云linux用户名,玩转华为云服务器ECS:001 如何登录并创建新用户
  11. 浅谈大数据时代的电子招投标
  12. fpga的jtag接口扫不到器件_JTAG接口的定义及常见问题
  13. 259-数据明文传输的安全问题
  14. 【计算机网络】(5)ping的过程分析+icmp协议
  15. CSS Reset(样式重置)
  16. 谷歌浏览器调试时页面的刷新与强制刷新+清空缓存的操作
  17. 今之君子,其责人也详,其待己也廉
  18. 如何评估前端开发周期/排期?
  19. 【读书笔记】TableauFineBi 学习小记
  20. SSM框架二手车交易网站源码+论文

热门文章

  1. Ubuntu 安装sogo 输入法
  2. Linux Mint (应用软件— 二进制文件编辑器 :bless)
  3. NOI——Bless All
  4. Nordic Thingy:52 SDK 安装及编译
  5. 交换安全 STP生成树
  6. stm32f4 CubeMX生成IAR工程 移植ST官方 Bootloader 教程
  7. csp 2022 总结
  8. excel文件打不开如何修复
  9. MySQL数据库——MySQL INSERT:插入数据(添加数据)
  10. python 抛出异常记录