js算法-矩阵

34 篇文章 1 订阅
订阅专栏
28 篇文章 0 订阅
订阅专栏

矩阵置零

力扣73. 矩阵置零

题目

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。

示例 1:

输入: 
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
输出: 
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]
示例 2:

输入: 
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5]
]
输出: 
[
  [0,0,0,0],
  [0,4,5,0],
  [0,3,1,0]
]
进阶:

一个直接的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个常数空间的解决方案吗?

解答1

思路1 非原地算法,
第一次遍历将值为0的横坐标与纵坐标存入表中,
第二次遍历将横坐标与纵坐标对应的行与列置为0

/**
 * 思路1 非原地算法,
 * 第一次遍历将值为0的横坐标与纵坐标存入表中,
 * 第二次遍历将横坐标与纵坐标对应的行与列置为0
 * @param matrix
 */
var setZeroes = function (matrix) {
    var s1 = new Set()
    var s2 = new Set()
    for (var i = 0; i < matrix.length; i++) {
        for (var j = 0; j < matrix[i].length; j++) {
            if (matrix[i][j] === 0) {
                s1.add(i);
                s2.add(j);
            }
        }
    }
    for (var i = 0; i < matrix.length; i++) {
        if (s1.has(i)) {
            matrix[i] = new Array(matrix[i].length).fill(0)
            continue
        }
        for (var j = 0; j < matrix[i].length; j++) {
            if (s2.has(j)) {
                matrix[i][j] = 0
            }
        }
    }
    return matrix
};

var result = setZeroes([
    [0, 1, 2, 0],
    [3, 4, 5, 2],
    [1, 3, 1, 5]
])
console.log(result)

在这里插入图片描述

思路2,原地算法

var setZeroes2 = function (matrix) {
    for (let i = 0; i < matrix.length; i++) {
        for (let j = 0; j < matrix[0].length; j++) {
            //当前是0的话
            if (Object.is(matrix[i][j], 0)) {
                // 处理当前行,将当前行的值都赋值为-0
                // 为什么赋值为0 请查阅 https://web03.cn/notes#/notes/detail/96
                // 0与-0在Object.is不相等,且在结果中相等,避免后来判断前面已经赋值的0
                for (let k = 0; k < matrix.length; k++) {
                    if (!Object.is(matrix[k][j], 0) && k !== i) {
                        matrix[k][j] = -0
                    }
                }
                // 处理当前列,将其置0
                for (let k = 0; k < matrix[0].length; k++) {
                    if (!Object.is(matrix[i][k], 0) && k !== j) {
                        matrix[i][k] = -0
                    }
                }
            }
        }
    }
    return matrix
};

var result2 = setZeroes2([
    [0, 1, 2, 0],
    [3, 4, 5, 2],
    [1, 3, 1, 5]
])
console.log(result2)

螺旋矩阵Ⅰ

54. 螺旋矩阵

题目
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

代码

示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
var spiralOrder = function (matrix) {
    if (matrix.length === 0) return []
    var res = []
    var top = 0, bottom = matrix.length - 1, left = 0, right = matrix[0].length - 1
    while (top <= bottom && left <= right) {
        for (var i = left; i <= right; i++) res.push(matrix[top][i])
        top++
        for (var i = top; i <= bottom; i++) res.push(matrix[i][right])
        right--
        if (top > bottom || left > right) break
        for (var i = right; i >= left; i--) res.push(matrix[bottom][i])
        bottom--
        for (var i = bottom; i >= top; i--) res.push(matrix[i][left])
        left++
    }
    return res
};

var result = spiralOrder([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
console.log(result)

思路: 分为上下左右四个边界,从左到右,从上到下,左(left=0)右(right=行长-1)上(top=0)下(buttom=列长-1),通过对四条边的循环,加上判断条件进行每一圈的搜索

执行过程

while满足条件,第一遍,走遍最外圈

在这里插入图片描述

while满足条件,第二遍,走遍最外-1圈
在这里插入图片描述

螺旋矩阵 II

螺旋矩阵 II

题目
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:
输入:n = 1
输出:[[1]]

提示:
1 <= n <= 20
var generaten = function(n) {
    // 初始化矩阵
    var result = Array.from({ length: n }, () => Array(n))
    var num = 1,
        rowStart = 0, // 行首边界
        rowEnd = n - 1, // 行尾边界
        columnStart = 0, // 列首边界
        columnEnd = n - 1 // 列尾边界
    while (num <= n * n) {
        // 首行
        for (var i = columnStart; i <= columnEnd; i++) {
            result[rowStart][i] = num++
        }
        rowStart++
        // 尾列
        for (var i = rowStart; i <= rowEnd; i++) {
            result[i][columnEnd] = num++
        }
        columnEnd--
        // 尾行
        for (var i = columnEnd; i >= columnStart; i--) {
            result[rowEnd][i] = num++
        }
        rowEnd--
        // 首列
        for (var i = rowEnd; i >= rowStart; i--) {
            result[i][columnStart] = num++
        }
        columnStart++
    }
    return result
};
console.log(generaten(1))
console.log(generaten(3))

思路:与【螺旋矩阵Ⅰ】类似,其实就是它的生成过程,先初始化一个n*n的二维数组,然后通过上下左右边界依次判断,进行赋值

运行过程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

js实现矩阵
神奇海螺万岁
04-12 5302
矩阵 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 最早来自于方程组的系数及常数所构成的方阵,这一概念由19世纪英国数学家凯利首先提出。 多元计算时候,矩阵很常见 人工智能中,多元计算很常见,现在我们来实现一下矩阵的计算 代码实现 python代码numpy自己就有,但是我们现在给没有矩阵类的javascript添加一个矩阵类 /** * 数学矩阵 */ class Matrix { constructor(arr) { this._arr = arr; }
matrixjs:Node.js 的基本矩阵运算
06-12
矩阵js Node.js 的基本矩阵运算
5个最流行的JavaScript矩阵计算库
最新发布
新缸中之脑
07-31 690
JavaScript 用途广泛,用途广泛,是一种可以应用于各种任务的语言。在处理矩阵计算时,JavaScript 缺乏其他编程语言提供的内置功能。然而,由于生态系统充满活力且开发社区不断发展,有各种库可帮助你有效地管理和操作矩阵。在本文中,我们将探讨五个最佳 JavaScript 矩阵计算库。让我们开始吧。
JS实现简单的二维矩阵乘积运算
11-22
本文实例讲述了JS实现简单的二维矩阵乘积运算方法。分享给大家供大家参考,具体如下: Console控制台截图如下: (上图为输出结果直接上代码了(A矩阵可以乘以B矩阵的前提是A矩阵的列数等于B矩阵的行数) <!DOCTYPE html> <html> <head> <title>demo</title> </head> <body> </body> [removed] function log(msg) { console.log(msg); } /** * 可视化的打印出
matrix:Javascript中的矩阵运算
05-14
矩阵 使用Javascript的功能性质执行基本矩阵运算的Javascript库 用法 var a = [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] var A = matrix ( a ) ; 运作方式 1.身份 A ( ) ; //returns [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 2.行 A ( 0 ) ; // returns [1, 2, 3] 3.专栏 A ( [ ] , 0 ) ; // returns [[1], [4], [7]] 4.元素 A ( 1 , 2 ) ; // returns 6 5.范围 A ( [ 1 , 2 ] ) ; // returns [[4, 5, 6], [7, 8, 9]] A ( [ ] , [ 1 , 2 ] ) ; // returns [[2, 3
JS实现矩阵相乘、行列式、逆矩阵
十二翼堕落天使
05-15 5348
一、矩阵运算 1.1 矩阵相乘 Am×p{\rm A_{m \times p}}Am×p​、Bp×n{\rm B_{p \times n}}Bp×n​ Cm×n=Am×p×Bp×n{\rm C_{m \times n}} = {\rm A_{m \times p}} \times {\rm B_{p \times n}}Cm×n​=Am×p​×Bp×n​ Cij=∑k=1paik⋅bkj{\rm C_{ij}} = \sum_{ \rm k=1}^{\rm p} a_{\rm ik} \cdot b_{\
jsMatrix:小巧轻便的 Javascript 矩阵
07-20
矩阵 小巧轻便的 Javascript 矩阵库 这主要用于 WebGL 矩阵转换,但将被抽象出来以对 n 大小的矩阵进行矩阵数学运算 要包含在您的项目中:下载 jsMatrix.js,将其添加到您的根目录或 lib/ 文件夹并将适当的脚本标记添加到您的项目页面。 创建一个新的 Matrix4 单位矩阵: $M.Matrix4(); 该库目前允许您: 通过.Translate(x, y, z) 通过.dRotate(degrees)或弧度旋转度数, .rRotate(radians) 通过.Scale(value)缩放 您可以像这样链接这些函数以轻松创建 ModelView Matricies: var matrix = $M . Matrix4 ( ) . dRotate ( 90 ) . Scale ( 0.5 ) . getMatri
js代码-矩阵,最短目标之间的最小总和值
07-16
在JavaScript编程领域,矩阵操作是一种常见的任务,尤其在数据处理和算法实现中。"最短目标之间的最小总和值"问题通常涉及到图论中的最短路径寻找或优化问题。在这个场景下,我们可以假设我们有一个二维矩阵,其中每...
jS-算法-数据结构-实践:CS实践
02-16
"jS-算法-数据结构-实践:CS实践"这个项目显然是为了帮助开发者通过JavaScript深入理解和应用这些核心概念。 首先,让我们来看看什么是算法算法是一系列解决问题的清晰指令,可以用来处理数据或完成特定任务。在...
js代码-初级算法-买卖股票的最佳时机 II
07-15
【标题】"js代码-初级算法-买卖股票的最佳时机 II" 涉及的主要知识点是动态规划和数组操作,这是计算机科学中常见的编程问题。在股票交易问题中,我们需要找到一个策略来最大化利润,其中每天可以进行一次买卖操作。...
js代码-螺旋矩阵,按顺时针生成矩阵
07-16
在实际应用中,螺旋矩阵可以用于各种数据结构和算法的练习,比如矩阵的旋转、查找特定元素等。此外,它还能帮助我们理解数组操作、二维数组的遍历以及递归或迭代思维。对于提升编程技能和解决问题能力,学习螺旋矩阵...
js矩阵代码
10-29
js矩阵实现代码
Matrix.js:JS矩阵
05-05
Matrix.js Matrix constructor new Matrix(height, width, init) new Matrix(<MatrixSize>, init) new Matrix(<Array>) new Matrix(<URL>) // 未实现 Methods Matrix.isMatrix(obj) 判断参数是否为矩阵。 Matrix.isSquare(obj) 判断参数是否为方阵。 Matrix.isSameSize(obj1, obj2) 判断obj1和obj2是否尺寸一样。 Matrix.isSameLength() 判断是否总长度一样,即面积一样。 Matrix.isArray(<Array>) 判断传入的Array是否为矩阵。 Matrix.isSame(A, B) 判断每一元素是否一样。 Matrix.isI(<Matrix>) 判断参数是否为单位
文字矩阵 HTML JavaScript
02-20
用HTML打出来的文字矩阵,可以修改文字,数字,颜色等等.
JSMatrixTransform:在 JS 中使用矩阵的示例
05-30
JS 中的矩阵图像变换 讨论的技术的基本实现。 对于那些在理解之前必须在代码中看到它的人。 查看演示:
Day 220/300 JS 中的矩阵运算
xinghuowuzhao的博客
04-30 1163
(一)需求 被问到矩阵23和矩阵32相乘是几乘几。我懵😳了。记录总结下 (二)矩阵想成 1、为什么矩阵相乘对前端很重要? 可以用少量的数字描述大量的空间中的变换,并且能轻易地在程序间共享。矩阵可以不同的坐标空间,甚至一些矩阵乘法可以将一组数据从一个坐标空间映射到另一个坐标空间。矩阵能够高效率地保存生成它们的每一步变换。 CSS3 3D变换时,是用的矩阵相乘; WebGL使用中大量使用了矩阵运算,各种各样的运算,如点定位、光线运算、动态角色 显卡尤其擅长大量的点乘矩阵运算 2、矩阵相乘的定义 比如,
七、leetcode - 矩阵JS
seaalan的博客
04-18 539
74. 搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 输入: matrix = [ [1, 3, 5, 7 ], [10,11,16,20], [23,30,34,60] ], target = 3 输出:
JS中创建一个矩阵 / 多维数组
dongnihao的博客
01-09 512
JS中没有创建矩阵 、多维数组的class。
色彩矩阵算法详解:实现图像黑白效果
在实际应用中,JavaScript库如grayscale.js会遍历DOM中的每个图像元素,用canvas绘制并应用色彩矩阵,以此达到转换图像颜色的目的。这种方法虽然比CSS滤镜兼容性更好,但计算量较大,可能会对性能造成一定影响。
写文章

热门文章

  • vue路由报错Navigation aborted from “/a“ to “/b“ via a navigation guard.两种解决方案 23123
  • 优雅的给vue对象设置初始值 17656
  • vue子组件修改prop值的多种方案 14804
  • maven打包报错Process terminated解决 14715
  • 移位运算符(<<、>>和>>>) 14598

分类专栏

  • cardano
  • solidity 2篇
  • Cocos Creator 6篇
  • 算法 28篇
  • javascript 34篇
  • 以太坊 24篇
  • 笔记 35篇
  • springboot 13篇
  • 工具 9篇
  • html 5篇
  • css 8篇
  • 微信小程序 5篇
  • react笔记 17篇
  • vue笔记 20篇
  • webpack 10篇
  • linux笔记 4篇
  • mysql笔记 1篇
  • 组件 1篇
  • java 3篇
  • typescript 1篇
  • 面试题 1篇
  • websocket 4篇
  • idea 1篇
  • 进制 1篇
  • 数据结构 1篇
  • uniapp 1篇
  • 运算符 3篇
  • 插件笔记 4篇

最新评论

  • 微信小程序后台报错源码sourcemap定位

    你若像风: 估计是你没有权限

  • windows批量重命名文件,去除括号

    weixin_54927438: 亲测没用

  • 小程序实现富文本图片点击预览

    weixin_44402190: 你好,这个文件能发一下嘛,现在下载不了了

  • webSocket多线程推送出错

    玻璃辉煌,: 这样的话是不是两条会丢掉一条

  • 微信小程序后台报错源码sourcemap定位

    3. lore Somit: 怎么找到错误内容这块啊 我在开发管理里面没找到

大家在看

  • 揭开 Vue 3 中大量使用 ref 的隐藏危机 1088
  • 带你0到1之QT编程:十七、Http协议实战,实现一个简单服务器和一个客户端进行http协议通信
  • 全面介绍 CSS 属性值计算 —— 掌握它就了解大部分 CSS 93
  • 基于微信小程序的家教信息管理系统的设计与实现(论文+源码)_kaic
  • 【机器学习】经典数据集鸢尾花的分类识别 1459

最新文章

  • web3默克尔树MerleTree白名单校验
  • Proxy代理配置解析
  • solidity函数重载以及调用
2022年28篇
2021年59篇
2020年104篇
2019年1篇
2018年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司网站的优化来选火6星舒心seo网站优化是什么意思网站个人优化意见咸宁工厂网站优化公司武汉做优化网站公司常州网站自然优化排名汕尾高效的免费网站优化柘城网站优化电话太原家装行业网站优化推广价格淮南手机网站优化谷歌优化网站排名永城网站搜索引擎优化如何优化网站快速排名大连seo网站优化推广报价甘肃seo优化网站优化网站方法推荐h火21星赞深圳网站推广外包优化优化网站有哪些措施南庄网站优化费用白银网站优化和推广宁波网站优化排名推广鄂托克前旗网站seo优化排名泉州网站排名优化网站排名优化推崇云速捷分析一下网站优化推广怎么做激光刀网站如何优化保定整站网站优化价格苏州网站建设优化制作公司金水区资讯网站搭建优化移动端网站优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化