一点点矩阵

news/2025/3/17 0:06:48/文章来源:https://www.cnblogs.com/meme-/p/18775885
  1. 矩阵置0
//O(m*n) O(m+n)
var setZeroes = function(matrix) {let row=[]let col=[]let n=matrix.lengthlet m=matrix[0].lengthfor(let i=0;i<n;i++){for(let j=0;j<m;j++){if(matrix[i][j]==0){row.push(i)col.push(j)}}}for(let i of row){for(let j=0;j<m;j++){matrix[i][j]=0}}for(let i of col){for(let j=0;j<n;j++){matrix[j][i]=0}}
};
//O(mn) O(m+n)
var setZeroes = function(matrix) {let n=matrix.lengthlet m=matrix[0].lengthlet row=new Set()let col=new Set()for(let i=0;i<n;i++){for(let j=0;j<m;j++){if(matrix[i][j]==0){row.add(i)col.add(j)}}}for(let i=0;i<n;i++){if(row.has(i)){matrix[i].fill(0)} for(let j=0;j<m;j++){if(col.has(j)){matrix[i][j]=0}}}
};
  • 空间复杂度O(1)的算法
    就是把本来要存储的有0的行啊列啊都存到这个矩阵的第一行第一列
    让第一行第一列的数来决定这一行这一列要不要置0
    那万一本来第一行没有0,但是遍历完矩阵内部的值后第一行有0了,第一行就被额外置0了,所以我们要用额外的变量来存第一行/列要不要置0
var setZeroes = function(matrix) {let n=matrix.lengthlet m=matrix[0].lengthlet flagRow=falselet flagCol=falsefor(let i=0;i<m;i++){if(matrix[0][i]==0){flagRow=true}}for(let i=0;i<n;i++){if(matrix[i][0]==0){flagCol=true}}for(let i=1;i<n;i++){for(let j=1;j<m;j++){if(matrix[i][j]==0){matrix[0][j]=matrix[i][0]=0}}}for(let i=1;i<n;i++){for(let j=1;j<m;j++){if(matrix[i][0]==0||matrix[0][j]==0){matrix[i][j]=0}}}if(flagCol){for(let i=0;i<n;i++){matrix[i][0]=0}}if(flagRow){// for(let i=0;i<m;i++){//     matrix[0][i]=0// }matrix[0].fill(0)}
};
  1. 螺旋矩阵
    image
    注意发现规律
var spiralOrder = function(matrix) {if (!matrix.length || !matrix[0].length) {return [];}let n=matrix.lengthlet m=matrix[0].lengthlet ans=[]let top=0,left=0let bottom=n-1,right=m-1while (left <= right && top <= bottom){for(let column=left;column<=right;column++){ans.push(matrix[top][column])}for(let row=top+1;row<=bottom;row++){ans.push(matrix[row][right])}if (left < right && top < bottom) {//⚠️注意这里的判断for(let column=right-1;column>=left+1;column--){ans.push(matrix[bottom][column])}for(let row=bottom;row>=top+1;row--){ans.push(matrix[row][left])}}top++left++right--bottom--}return ans
};
  1. 旋转图像
    感觉和那个轮换数组有点像 感觉
    也是根据规律做得
var rotate = function(matrix) {let n=matrix.lengthfor(let i=0;i<Math.floor(n/2);i++){for(let j=0;j<Math.floor((n+1)/2);j++){let tmp=matrix[i][j];matrix[i][j]=matrix[n-j-1][i]matrix[n-j-1][i]=matrix[n-i-1][n-j-1]matrix[n-i-1][n-j-1]=matrix[j][n-i-1]matrix[j][n-i-1]=tmp}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900055.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于DVB-T的COFDM+16QAM+Viterbi编解码图传通信系统matlab仿真,包括载波定时同步,信道估计

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印):仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要基于DVB-T的COFDM+16QAM+Viterbi编解码通信链路是一种常用的数字视频广播系统,用于实现高效的传输和接收。该系统结合了正交频分复用(COFDM)…

Day15_http协议

每日一题 面试题: 请解释以下问题:HTTP/2 的主要改进有哪些?与 HTTP/1.1 相比,它如何解决“队头阻塞”问题? HTTPS 是如何实现数据加密的?详细说明 TLS 握手过程。 HTTP/3 为什么选择基于 UDP 的 QUIC 协议?它解决了哪些传统 TCP 协议的缺陷?解答: 1. HTTP/2 的改进与…

基于双PI控制的永磁同步电机变频调速系统simulink建模与仿真

1.课题概述 基于双PI控制的永磁同步电机变频调速系统simulink建模与仿真。2.系统仿真结果 (完整程序运行后无水印)3.核心程序与模型 版本:MATLAB2022a4.系统原理简介基于双PI控制的永磁同步电机(PMSM)变频调速系统是一种高效的电机控制策略,它利用两个独立的PI控制器分别控…

DeepSeek+Claude强强联手,使用AI驱动DjangoStarter 3.1框架升级

前言 上个月底培训了一周就没时间更新博客 上周有一些空闲时间,就继续体验最近很火的AI辅助编程 之前的文章中有说到我配置好了 VSCode + Cline 插件搭配本地部署的 DeepSeek 来实现AI辅助编程参考: 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案但 Cline 插件消耗…

20243426 实验一《Python程序设计》实验报告

课程:《Python程序设计》 班级: 2434 姓名: 樊泽睿 学号:20243426 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试分析,要有过程) 3.编写程序,练习变量…

第01章 数据库概述

第01章 数据库概述 1. 为什么要使用数据库持久化 (Persistence): 把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以“固化”,而持久化的实现过程大多通过各种关系数据库来完成。 持久化的主要作…

【每日一题】20250316

【每日一题】曲线 \(\displaystyle y=3(x^2+x-\sqrt{4x^2+3})e^{-2x^2}\) 在点 \((-1,0)\) 处的切线方程为_________.如图所示,取一段长为 \(12\) 的绳子,如果把这段绳子的两个端点分别固定在画图板上不同的两点 \(F_1\) 和 \(F_2\) 处,当绳长大于 \(F_1\) 和 \(F_2\) 之间…

foobar2000 v2.24.3 汉化版

foobar2000 v2.24.3 汉化版 -----------------------【软件截图】---------------------- -----------------------【软件介绍】---------------------- foobar2000 是一个 Windows 平台下的高级音频播放器.包含完全支持 unicode 及支持播放增益的高级标签功能. 特色: * 支持的…

拉格朗日插值算法

首先介绍下作用 在平面上给定 n 个点,求一条多项式图像穿过所有的点 (每个点横坐标不同)由浅入深,首先想一个悬浮点 1 ,它在除 1 以外给定的点的横坐标上函数值都是 0 。已知它的横坐标 \(x_1\) , 怎么用函数图像表示 我们一拍脑袋发现,可以这么表示 \[f1(x) = \prod_{i =…

本地部署Gemma3模型

本地部署Gemma3模型 1. 拉取并运行 Ollama 容器 # 拉取 Ollama 镜像 docker pull ollama/ollama# 运行 Ollama 容器 docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama2. 进入容器并部署 Gemma3 模型(默认4B版 ) # 进入 Ollama 容…

Anaconda中启动Jupyter lab的方法

Anaconda中启动Jupyter lab的方法: 1、在Anaconda Prompt中,使用命令来启动:jupyter lab 2、在Anaconda界面中点击Jupyter lab下方的launch按钮启动,如下图所示:

React+Next.js+MaterialUI+Toolpad技术栈学习——安装

今天跟大家分享一个React+Next.js+MaterialUI技术栈的前端框架Toolpad。相关资源MaterialUI Toolpad框架效果安装运行安装命令npx create-toolpad-app@latest your-app cd your-app npm run dev文件结构 无身份认证 ├── app │ ├── (dashboard) │ │ ├── layou…