leetcode 矩阵专题——java实现

73. 矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
关键在于:一次扫描全表记录为0的坐标,然后对记录的坐标整行整列赋值0

class Solution {public void setZeroes(int[][] matrix) {int n=matrix.length,m=matrix[0].length;int[] x=new int[202];int[] y=new int[202];int x1=0,y1=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(matrix[i][j]==0){//记录为0点的坐标x[x1++]=i;y[y1++]=j;System.out.println(i+j);}}}//记录的坐标for(int i=0;i<x1;i++){int xx=0;while(xx<m){//行=0matrix[x[i]][xx++]=0;}int yy=0;while(yy<n){//列=0System.out.println("yy"+yy+y[i]);int a=yy,b=y[i];// matrix[a][b]=0;matrix[yy][y[i]]=0;yy++;}}}
}

54. 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list=new ArrayList<Integer>();int n=matrix.length,m=matrix[0].length;int[][] map = new int[n][m];int next[][]={{0,1},{1,0},{0,-1},{-1,0}};//右下左上顺时针int x=0,y=0,k=0;for(int i=1;i<=n*m;i++)//这个循环只是表明要走n*n步而已{list.add(matrix[x][y]);map[x][y]=-1;//访问后标记int tx=x+next[k][0];int ty=y+next[k][1];//下一个位置if(tx<0||ty<0||tx>=n||ty>=m||map[tx][ty]==-1)//下一个位置到达边界条件{k=(k+1)%4;//转换方向tx=x+next[k][0];//新的下一位置ty=y+next[k][1];}x=tx;y=ty;//确定的下一步的位置}return list;}
}

59. 螺旋矩阵 II

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
在这里插入图片描述
本质就是模拟填数的过程。
但一下代码耗时长

class Solution {public int[][] generateMatrix(int n) {int[][] map = new int[n][n];int x=0,y=0,k=0;int[][] next={{0,1},{1,0},{0,-1},{-1,0}};//转向顺序:右、下、左、上for(int i=1;i<=n*n;i++){System.out.println(x+"y"+y+"i"+i);map[x][y]=i;int tx=x+next[k][0];int ty=y+next[k][1];if(tx<0||ty<0||tx>=n||ty>=n||map[tx][ty]!=0){//转向k=(k+1)%4;tx=x+next[k][0];ty=y+next[k][1];}x=tx;y=ty;}return map;}
}

48. 旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

关键在于:找到规律,进行先矩阵转置(就是[i][j],[j][i]互换),再左右对称的两列互换。

class Solution {public void rotate(int[][] matrix) {//先矩阵转置,再左右对称的两列互换int n=matrix.length;//转置(i,j互换)for(int i=0;i<n;i++){//对一半进行操作for(int j=0;j<i;j++){int tmp = matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=tmp;}}//交换两列for(int i=0;i<n;i++){for(int j=0;j<n/2;j++){int tmp = matrix[i][j];matrix[i][j]=matrix[i][n-1-j];matrix[i][n-1-j]=tmp;}}}
}

240. 搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列
在这里插入图片描述
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

从右上角看是一颗二叉搜索树
然后就二分查找

class Solution {public boolean searchMatrix(int[][] matrix, int target) {//[i+1][j],[i][j+1]<  [i+1][j+1]int n=matrix.length,m=matrix[0].length;int i=0,j=m-1;//从右上角开始while(i<n&&j>=0){if(matrix[i][j]==target) return true;if(target>matrix[i][j])i++;else j--;}return false;}
}

注:一开始由于我总想着通过关键点[i+1]][j+1]的比较,来找到特定的行和列,而导致错误,实际上不能确定行列只能排除左上角。

74. 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

每行中的整数从左到右按非严格递增顺序排列。
每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

做完上题再看这题,很自然就从右上角看到了二叉搜索树,按照同样的思路用二分查找。

class Solution {public boolean searchMatrix(int[][] matrix, int target) {//非严格递增就是可以相等int n=matrix.length,m=matrix[0].length;int i=0,j=m-1;//从右上角开始while(i<n&&j>=0){if(matrix[i][j]==target) return true;if(target>matrix[i][j])i++;else j--;}return false;}
}

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

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

相关文章

【云服务器】vscode + onethingAi + SSH远程连接

通过VS code远程连接服务器&#xff0c;并进行上传和下载文件操作_vs code 上传制定文件-CSDN博客 vscode远程连接服务器&#xff08;remote ssh&#xff09;上传本地文件到服务器(sftp)_vscode上传文件到服务器-CSDN博客 vscode连接远程服务器&#xff08;傻瓜式教学&#x…

苹果电脑怎么录制屏幕?3招教你轻松录制,高效实用

随着数字化时代的快速发展&#xff0c;屏幕录制已经成为我们日常工作和生活中不可或缺的一部分。它不仅是展示产品、教授知识、分享经验的重要工具&#xff0c;更是我们展现个性和创造力的新舞台。在苹果电脑上&#xff0c;屏幕录制功能的应用更是将这一体验推向了新的高度。 …

【屏驱MCU】RT-Thread 文件系统接口解析

本文主要介绍【屏驱MCU】基于RT-Thread 系统的文件系统原理介绍与代码接口梳理 目录 0. 个人简介 && 授权须知1. 文件系统架构1.1 虚拟文件系统目录架构 2. menuconfig 分析3. 代码接口分析3.1 DFS框架挂载目录3.2 【FAL抽象层】分区表和设备表3.3 如何将【文件路径】挂…

多任务协程处理的流程,看看是否和你想像的一样

import time import asyncioasync def func1():print("你好&#xff0c;我是第一个任务")await asyncio.sleep(3)print("你好&#xff0c;我是第二个任务")async def func2():print("你好&#xff0c;我是第3个任务")await asyncio.sleep(2)…

GNSS形变监测系统

TH-WY1 GNSS形变监测系统采用扼流圈设计有以下几个优势&#xff1a; 高精度测量&#xff1a;扼流圈是一种高精度的传感器&#xff0c;可以提供非常精确的测量结果。这使得GNSS形变监测系统能够准确地测量结构物的形变变化。 高稳定性&#xff1a;扼流圈设计使得传感器具有良好…

第33篇 计算数据中最长的连续1的个数<三>

Q&#xff1a;如何将计算出的结果&#xff08;最长的连续1的个数&#xff09;显示在DE2-115开发板的HEX上&#xff1f; A&#xff1a;基本原理&#xff1a;DE2-115_Computer_System中的HEX并行端口作为内存映射设备连接到DE2-115开发板的七段数码管&#xff0c;每个端口都对应…

大模型提示工程(Prompt),让LLM自己优化提示词

前言 随着大家对于prompt提问的研究以及对于高质量回答的追求&#xff0c;现在有一个比较热的词叫做prompt creator。 Prompt Creator 实际上是使得 ChatGPT 更好的引导你去完善自己的提问&#xff0c;同时也完善自己的回答&#xff0c;更好地指导自己回答出更加令使用者满意…

win10桌面任务栏美化(不用软件)(任务栏应用居中,透明任务栏)

透明任务栏 1、打开设置——个性化——颜色&#xff0c;打开透明效果&#xff1b; 2、在搜索框搜索注册表编辑器&#xff1b; 3、找如下路径&#xff1a;计算机\HKEY-CURRENT-USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced&#xff1b; 4、寻找文件&a…

【TS】TypeScript类型断言:掌握类型转换的艺术

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript类型断言&#xff1a;掌握类型转换的艺术1. 引言2. 什么是类型断言&a…

链表的实现(C++版)

对于链表的学习,之前在C语言部分的时候就已经有学习过,也学会了使用C语言来打造一个链表.如今学了C 则想通过C来打造一个链表,以达到锻炼自己的目的. 1.链表的初步实现 1.节点模板的设置 template <class T> struct ListNode{ListNode <T>* _next;ListNode <T…

k8s学习--使用kubepshere部署devops项目时遇到的报错(无法找到gitee仓库)

今天在kubesphere部署devops项目&#xff0c;编辑流水线的时候&#xff0c;发现怎么也访问不到gitee仓库 报错的流水线位置 报错日志 报错原因 变量问题 因为看见了csy/sangomall&#xff0c;所以理所当然的把路径变量GITEE_ACCOUNT写成了用户名 解决方法 结果发现仓库…

可靠的图纸加密软件,七款图纸加密软件推荐

大家好啊,我是小固,今天跟大家聊聊图纸加密软件。 作为一名设计师,我深知保护自己的知识产权有多重要。曾经就因为图纸泄露,差点血本无归,那个教训可真是惨痛啊!所以我今天就给大家推荐几款靠谱的图纸加密软件,希望能帮到你们。 固信软件https://www.gooxion.com/ 首先要隆重…

Java语言程序设计——篇十一(1)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是CSDN&#xff0c;我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f33…

Vue 的安装与配置

今天是八月一日&#xff0c;我也开启了Vue的学习&#xff0c;希望和大家一起学编程&#xff0c;相互督促&#xff0c;相互进步&#xff01; 安装vscode 安装Node.js 官网&#xff1a;https://nodejs.org/zh-cn 下载完正常安装就行 可以winr输入cmd&#xff0c;也可以vscod…

springboot智能健康管理平台-计算机毕业设计源码57256

摘要 在当今社会&#xff0c;人们越来越重视健康饮食和健康管理。借助SpringBoot框架和MySQL数据库的支持&#xff0c;开发智能健康管理平台成为可能。该平台结合了小程序技术的便利性和SpringBoot框架的快速开发能力&#xff0c;为用户提供了便捷的健康管理解决方案。 通过智能…

【多线程】单例模式

&#x1f3c0;&#x1f3c0;&#x1f3c0;来都来了&#xff0c;不妨点个关注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主页&#xff1a;欢迎各位大佬! 文章目录 1. 什么是单例模式1.1 理解单例模式1.2 单例模式的特点 2. 饿汉模式3. 懒汉模式3.1 单线程下的懒…

中国人民解放军建军97周年

缅怀先烈&#xff0c;砥砺前行 付吾辈之韶华&#xff0c;耀吾辈之中华! 万里河山&#xff0c;有您心安!

Django REST Framework(十五)路由Routes

如何在Django REST framework中利用SimpleRouter和DefaultRouter来高效生成视图集的路由信息,并详细解释如何使用action装饰器为视图集中的自定义方法生成路由 1.路由的定义规则 路由称为URL(Uniform Resource Locator,统一资源定位符),也可以称为URLconf,是对可以从互联…

【Java题解】杨辉三角—力扣

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; ⭐目前主更 专栏Java ⭐数据结构 ⭐已更专栏有C语言、计算机网络⭐ 题目链接&#xff1a;杨辉三角 目录&#x1f451; ⭐题…