LeetCode热题100JS(20/100)第四天|41. 缺失的第一个正数|73. 矩阵置零|54. 螺旋矩阵|48. 旋转图像
41. 缺失的第一个正数
题目链接:41. 缺失的第一个正数
难度:困难
刷题状态:1刷
新知识:
解题过程
思考
示例 1:
输入:nums = [1,2,0] 输出:3 解释:范围 [1,2] 中的数字都在数组中。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
重点是不能用这个 nums.sort((a,b)=>a-b),不能排序
注意可能出现重复的数字
搞不出来看答案
题解分析
参考题解链接:缺失的第一个正数
第一:当nums[i]>n的时候,不用去考虑
比如nums = [7,8,9,11,12],n=5,排满的情况下[1,2,3,4,5],所以7,8,9,,,根本不用考虑
第二:假设nums[i]就应该待在nums[nums[i]-1]的位置,
nums[i]是值a,他现在的位置是i,他应该在的位置是nums[i]-1
但是现在在nums[i]-1位置上的是nums[nums[i]-1]值b,要交换ab的值,是值a呆在nums[i]-1位置上
也就是nums[i]=nums[nums[i]-1]
就是说理想的情况是[1,2,3,4],然后出现了[1,1,3,4],那么就可以判断2是缺失的
详细分析如下
第三,要用while而不是if,因为被换过来的值b现在待在i位置上,但b应该在的位置是b-1,两者不一定相等,所以要循环直到经历过该位置的数字都各归各位
,代码如下
var firstMissingPositive = function(nums) {let n=nums.lengthfor(let i=0;i<n;i++){while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){let tmp=nums[nums[i]-1]nums[nums[i]-1]=nums[i]nums[i]=tmp}}for(let i=0;i<n;i++){if(nums[i]!=i+1){return i+1}}return n+1
};
手搓答案(无非废话版)
var firstMissingPositive = function(nums) {let n=nums.lengthfor(let i=0;i<n;i++){while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){let tmp=nums[nums[i]-1]nums[nums[i]-1]=nums[i]nums[i]=tmp}}for(let i=0;i<n;i++){if(nums[i]!=i+1){return i+1}}return n+1
};
总结
这题太巧妙了,虽然写出来就几行,但逻辑上要拐几个弯(头凸)
73. 矩阵置零
题目链接:73. 矩阵置零
难度:中等
刷题状态:1刷
新知识:
解题过程
思考
示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]
写出来了,速度很慢
/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var setZeroes = function(matrix) {let mm=[],nn=[],mok=0for(let m=0;m<matrix.length;m++){for(let n=0;n<matrix[m].length;n++){if(!matrix[m][n]){mm.push(m)nn.push(n)}}}for(let m=0;m<matrix.length;m++){mok=0for(let i of mm){if(m==i){let mok=1for(let n=0;n<matrix[m].length;n++){matrix[m][n]=0}break}}if(!mok){for(let n=0;n<matrix[m].length;n++){for(let j of nn){if(n==j){matrix[m][n]=0}}}}}
};
题解分析
参考题解链接:矩阵置零
改进的点主要在,建立row和col,直接表示二维数组,这样在第二遍循环赋值的时候就直接判断row,col就行
/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var setZeroes = function(matrix) {let m=matrix.length,n=matrix[0].lengthlet row=Array(m).fill(1)let col=Array(n).fill(1)for(let i=0;i<m;i++){for(let j=0;j<n;j++){if(!matrix[i][j]){row[i]=0col[j]=0}}}for(let i=0;i<m;i++){for(let j=0;j<n;j++){if(row[i]==0||col[j]==0){matrix[i][j]=0}}}
};
手搓答案(无非废话版)
/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var setZeroes = function(matrix) {let m=matrix.length,n=matrix[0].lengthlet row=Array(m).fill(1)let col=Array(n).fill(1)for(let i=0;i<m;i++){for(let j=0;j<n;j++){if(!matrix[i][j]){row[i]=0col[j]=0}}}for(let i=0;i<m;i++){for(let j=0;j<n;j++){if(row[i]==0||col[j]==0){matrix[i][j]=0}}}
};
总结
不难,多刷多记
54. 螺旋矩阵
题目链接:54. 螺旋矩阵
难度:中等
刷题状态:1刷
新知识:
解题过程
思考
示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
我的理解是,每次第一行的数值遍历完之后,剩下的数组进行转置,(456789长方体逆时针旋转90°)然后下一次循环遍历还是从新的数组的第一行开始
一遍过哈哈!
题解分析
参考题解链接:螺旋矩阵
手搓答案(无非废话版)
/*** @param {number[][]} matrix* @return {number[]}*/
var spiralOrder = function(matrix) {let res=[]let n=matrix.length*matrix[0].lengthwhile(res.length<n){for(let i=0;i<matrix[0].length;i++){res.push(matrix[0][i])}matrix.shift()if(res.length<n) matrix=zzh(matrix)}return res
};
function zzh(ma){let rows=ma.lengthlet cols=ma[0].lengthlet trans=[]for(let i=0;i<cols;i++){trans[i]=[]for(let j=0;j<rows;j++){trans[i][j]=ma[j][cols-1-i]}}return trans
}
总结
由转置矩阵的代码要知道是怎么写的,先生成cols个[[],[],[],,,,]空子集,再往里面赋值
48. 旋转图像
题目链接:48. 旋转图像
难度:中等
刷题状态:1刷
新知识:
解题过程
思考
示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]]
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
这题是顺时针旋转90°
1现在在[0,0],应该在[0,2] 2现在在[0,1],应该在[1,2] 3现在在[0,2],应该在[2,2]
4现在在[1,0],应该在[0,1] 5现在在[1,1],应该在[1,1] 6现在在[1,2],应该在[2,1]
7现在在[2,0],应该在[0,0] 8现在在[2,1],应该在[1,0] 9现在在[2,2],应该在[2,0]
找规律
发现matrix[i][j]=matrix[n-1-j][i]
但我没写出来,看答案
题解分析
参考题解链接:旋转图像
举个例子吧
开始循环的时候,
7到1的位置00了,matrix[i][j]=matrix[n-1-j][i]
然后9应该到7的位置20,matrix[n-1-j][i]=matrix[n-1-i][n-1-j]
然后3应该到9的位置22,matrix[n-1-i][n-1-j]=matrix[j][n-1-i]
然后1应该到3的位置02,matrix[j][n-1-i]=matrix[i][j]
至此一次循环完成,可以理解为从外到内每次完成第一排(n+1)/2个元素(0,1)的旋转交换位置,然后第二排(n+1)/2个元素,直到第n/2排,
或者也可以理解为每次完成第一排n/2个元素的旋转交换位置,然后第二排n/2个元素,直到第(n+1)/2排,
所以
/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
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-1-j][i]matrix[n-1-j][i]=matrix[n-1-i][n-1-j]matrix[n-1-i][n-1-j]=matrix[j][n-1-i]matrix[j][n-1-i]=tmp}}
};
手搓答案(无非废话版)
/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var rotate = function(matrix) {let n=matrix.lengthfor(let i=0;i<Math.floor((n+1)/2);i++){for(let j=0;j<Math.floor(n/2);j++){let tmp=matrix[i][j]matrix[i][j]=matrix[n-1-j][i]matrix[n-1-j][i]=matrix[n-1-i][n-1-j]matrix[n-1-i][n-1-j]=matrix[j][n-1-i]matrix[j][n-1-i]=tmp}}
};
总结
注意上面i,j的不同,i,j都是相对于当前的mat
相关文章:
LeetCode热题100JS(20/100)第四天|41. 缺失的第一个正数|73. 矩阵置零|54. 螺旋矩阵|48. 旋转图像
41. 缺失的第一个正数 题目链接:41. 缺失的第一个正数 难度:困难 刷题状态:1刷 新知识: 解题过程 思考 示例 1: 输入:nums [1,2,0] 输出:3 解释:范围 [1,2] 中的数字都在数组中…...
【银河麒麟高级服务器操作系统实际案例分享】数据库资源重启现象分析及处理全过程
更多银河麒麟操作系统产品及技术讨论,欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer…...
开源架构与人工智能的融合:开启技术新纪元
最近五篇文章推荐: 开源架构的自动化测试策略优化版(New) 开源架构的容器化部署优化版(New) 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开…...
缓存那些事儿
为什么要使用缓存 性能 我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。 并发 在大并发的情况下,所有的请求直接访问数…...
【弹性计算】弹性裸金属服务器和神龙虚拟化(二):适用场景
《弹性裸金属服务器》系列,共包含以下文章: 弹性裸金属服务器和神龙虚拟化(一):功能特点弹性裸金属服务器和神龙虚拟化(二):适用场景弹性裸金属服务器和神龙虚拟化(三&a…...
通往 AI 之路:Python 机器学习入门-语法基础
第一章 Python 语法基础 Python 是一种简单易学的编程语言,广泛用于数据分析、机器学习和人工智能领域。在学习机器学习之前,我们需要先掌握 Python 的基本语法。本章将介绍 Python 的变量与数据类型、条件语句、循环、函数以及文件操作,帮助…...
FastGPT 引申:信息抽取到知识图谱的衔接流程
文章目录 信息抽取到知识图谱的衔接流程步骤1:原始信息抽取结果步骤2:数据标准化处理(Python示例)步骤3:Cypher代码动态生成(Python驱动) 关键衔接逻辑说明1. 唯一标识符生成规则2. 数据映射策略…...
计算机毕业设计SpringBoot+Vue.js保险合同管理系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
58、深度学习-自学之路-自己搭建深度学习框架-19、RNN神经网络梯度消失和爆炸的原因(从公式推导方向来说明),通过RNN的前向传播和反向传播公式来理解。
一、RNN神经网络的前向传播图如下: 时间步 t1: x₁ → (W_x) → [RNN Cell] → h₁ → (W_y) → y₁ ↑ (W_h) h₀ (初始隐藏状态) 时间步 t2: x₂ → (W_x) → [RNN Cell] → h₂ → (W_y) → y₂ ↑ (W_h) h₁ 时间…...
什么是 Cholesky 分解?兼谈正定矩阵和二次型
Cholesky 分解在深度学习中的应用与理解 Cholesky 分解是一种用于对称正定矩阵的特殊分解方法,在线性代数和概率模型中有广泛应用。对于深度学习研究者来说,理解 Cholesky 分解不仅有助于掌握矩阵运算的理论基础,还能在高斯过程、变分方法&a…...
在单位,领导不说,但自己得懂的7个道理
如果你感到很难继续适应旧模式、旧关系、旧想法,开始厌倦生活,你很可能到了该蜕皮的时候。把“不是自己”的那部分舍弃掉,你就能看见“自己是谁”了。 ——奥赞瓦罗尔,《读者》2024年第11期 前几天听部门里一个新来的小姑娘抱怨&a…...
bge-large-zh-v1.5 与Pro/BAAI/bge-m3 区别
ge-large-zh-v1.5 和 Pro/BAAI/bge-m3 是两种不同的模型,主要区别在于架构、性能和应用场景。以下是它们的对比: 1. 模型架构 bge-large-zh-v1.5: 基于Transformer架构,专注于中文文本的嵌入表示。 参数量较大,适合处…...
lamp平台介绍
一、lamp介绍 网站: 静态 动态 php语言 .php 作用:运行php语言编写动态网站应用 lamp Linux Apache MySQL PHP PHP是作为httpd的一个功能模块存在的 二、部署lamp平台 1、测试httpd是否可正常返回PHP的响应 2、测试PHP代码是否可正常连接数据…...
Windows10系统构建本地安全私有化的个人知识库——采用DeepSeek+RAGFlow
一、为什么要构建本地私有化个人知识库 1.1、自身需求 1、需要相关隐私资料内容的安全保护可控; 2、需要根据自身的隐私资料内容构建出个性化的知识库; 一些常见的业务场景如:①希望我们的智能助手可以根据公司的管理制度回答问题,让员工可以随时了解公司相关制度内容信息;…...
Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案
Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案 问题背景: 执行yum update出现如下报错 排查虚拟机是否联网: ping -c 4 www.baidu.com 可以看到网络链接没有问题 解决方案: 原因是国外的镜像源有问题&am…...
Java 大视界 -- Java 大数据在智能金融反欺诈中的技术实现与案例分析(114)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
每日OJ_牛客_游游的字母串_枚举_C++_Java
目录 牛客_游游的字母串_枚举 题目解析 C代码 Java代码 牛客_游游的字母串_枚举 游游的字母串 描述: 对于一个小写字母而言,游游可以通过一次操作把这个字母变成相邻的字母。a和b相邻,b和c相邻,以此类推。特殊的࿰…...
AI会带给我们一个什么样的未来
AI到来的时代,很多人还没有意识到这一点,就是AI在新的时代不仅改变了游戏规则,还创造了一个全新的游戏规则。我们谁也不清楚接下来会发生什么? AI是否能够像人类一样看、听和说话,或者AI将永远改变企业的运作方式&…...
示例:在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处
一、目的:分享在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处 在WPF中使用Segoe MDL2 Assets字体,可以通过设置控件的FontFamily属性来实现。Segoe MDL2 Assets是一个包含许多图标的字体,通常用于Windows应用程序的图标显示。 二、…...
h5 IOS端渐变的兼容问题 渐变实现弧形效果
IOS端使用渐变的时候有兼容问题 以下是问题效果,图中黑色部分期望的效果应该是白色的。但是ios端是下面的样子…… 安卓pc 支持: background-image: radial-gradient(circle 40rpx at 100% 0, #f3630c 40rpx, rgb(255, 255, 255) 50%);安卓pc ios支持…...
Linux搜索---find
find搜索 find 命令的核心功能是在指定的目录路径下,递归地搜索文件和目录,并且可以根据多种条件对搜索结果进行筛选,还能对符合条件的文件和目录执行特定操作。 一、基础语法结构 find [起始目录] [匹配条件] [执行操作] # 基本示例 find…...
Libgdx游戏开发系列教程(4)——显示中文文字
目录 2种方法优缺点 BitmapFont FreeTypeFont 方法1 使用BitmapFont 1.下载hiero工具 2.生成fnt文件 3.代码使用 测试效果 方法2 使用FreeType 1.依赖引入 2.代码使用 测试效果 使用疑问点 这里主要介绍关于在Libgdx显示文字的2种方法 本文代码示例采用kotl…...
自然语言处理:朴素贝叶斯
介绍 大家好,博主又来和大家分享自然语言处理领域的知识了。按照博主的分享规划,本次分享的核心主题本应是自然语言处理中的文本分类。然而,在对分享内容进行细致梳理时,我察觉到其中包含几个至关重要的知识点,即朴素…...
题目 3216 ⭐团建⭐【DFS】蓝桥杯2024年第十五届省赛
小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为 n 和 m 的树,树上的每个结点上有一个正整数权值 c 1 , c 2 , ⋅ ⋅ ⋅ , c n c_1, c_2, , c_n c1,c2,⋅⋅⋅,cn, d 1 , d 2 , ⋅ ⋅ ⋅ , d m d_1, d_…...
UltraScale系列FPGA实现SDI转PCIE3.0采集卡,基于UltraScale GTH+XDMA架构,提供工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目本博已有的 SDI 编解码方案我已有的PCIE方案本博客方案的PCIE2.0版本本博客方案的RIFFA版本 3、详细设计方案设计原理框图SDI 输入设备LMH1219RTWR 均衡器UltraScale …...
Linux系列:如何调试 malloc 的底层源码
一:背景 1. 讲故事 上一篇我们聊过 C# 调用 C 的 malloc 代码来演示heap的内存泄露问题,但要想深入研究得必须把 malloc 的实现库 libc.so 给调试起来,大家都知道在Linux 上 libc 和 Windows 的 Win32 API 是一个层级的,由于 Li…...
深入 PipeWire
简介 随着它的成熟,PipeWire 项目正在慢慢地变得流行。它的文档依然相对稀少,但正在逐渐增长。然而,让项目外部的人尝试用他们自己的语言来理解和解释它总是一个好主意,重申想法,从他们自己的角度来看待它。 在之前的…...
20250304笔记-阅读论文
文章目录 前言一、寻找论文1.1寻找有代码的论文方法一:浏览器扩展1.1.1使用流程 方法二:使用Papers with Code 1.2大量搜索代码 二、阅读论文所用软件 三、引用文献格式总结 前言 一、寻找论文 1.1寻找有代码的论文 方法一:浏览器扩展 浏览…...
线程POSIX信号量/基于环形队列的⽣产消费模型
一,POSIX线程信号量 信号量的本质就是一个计数器,也是对资源的预定机制,POSIX信号量和SystemV信号量作⽤相同,都是⽤于同步操作,达到⽆冲突的访问共享资源⽬的。但 POSIX可以⽤于线程间同步。 1,初始化信…...
Spark核心之02:常用算子详解
1、RDD操作详解 # 启动spark-shell spark-shell --master local[2] 1.1 基本转换 1) map map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。 举例: scala> val a sc.parallelize(1 …...
