LeetCode 21 / 100

目录

  • 矩阵
    • 矩阵置零
    • 螺旋矩阵
    • 旋转图像
    • 搜索二维矩阵 II

LeetCode 73. 矩阵置零
LeetCode 54. 螺旋矩阵
LeetCode 48. 旋转图像
LeetCode 240. 搜索二维矩阵 II

矩阵

矩阵置零

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

在这里插入图片描述

  • O ( m + n ) O(m + n) O(m+n) 额外空间
  • 两遍扫 matrix, 第一遍用集合记录哪些行,哪些列有0 , 第二遍置 0
class Solution {public void setZeroes(int[][] matrix) {Set<Integer> row_zero = new HashSet<>();Set<Integer> col_zero = new HashSet<>();int row = matrix.length;int col = matrix[0].length;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (matrix[i][j] == 0) {row_zero.add(i);col_zero.add(j);}}}for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (row_zero.contains(i) || col_zero.contains(j)) {matrix[i][j] = 0;}}}}
}
  • O ( 1 ) O(1) O(1) 空间
  • 用 matrix 第一行和第一列记录该行该列是否有0,作为标志位
  • 但是对于第一行,和第一列要设置一个标志位,为了防止自己这一行(一列)也有0的情况.
class Solution {public void setZeroes(int[][] matrix) {int row = matrix.length;int col = matrix[0].length;boolean row_flag = false;boolean col_flag = false;// 第一行有没有0for (int j = 0; j < col; j++) {if (matrix[0][j] == 0) {row_flag = true;break;}}// 第一列有没有0for (int i = 0; i < row; i++) {if (matrix[i][0] == 0) {col_flag = true;break;}}// 把第一行第一列作为标志位for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {if (matrix[i][j] == 0) {matrix[i][0] = matrix[0][j] = 0;}}}// 置0 for (int i = 1; i < row; i++) {for (int j = 1; j < col; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}if (row_flag) {for (int j = 0; j < col; j++) {matrix[0][j] = 0;}}if (col_flag) {for (int i = 0; i < row; i++) {matrix[i][0] = 0;}}}
}
  • 一个标记
    在这里插入图片描述
class Solution {public void setZeroes(int[][] matrix) {boolean col_flag = false;int row = matrix.length;int col = matrix[0].length;for (int i = 0; i < row; i++) {if (matrix[i][0] == 0) col_flag = true;for (int j = 1; j < col; j++) {if (matrix[i][j] == 0) {matrix[i][0] = matrix[0][j] = 0;}}}for (int i = row - 1; i >= 0; i--) {for (int j = col - 1; j >= 1; j--) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}if (col_flag) matrix[i][0] = 0;}}
}

螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

在这里插入图片描述

  • 别怕设变量
class Solution {public List<Integer> spiralOrder(int[][] matrix) {if (matrix.length == 0) {return new ArrayList<Integer>();}int l = 0, r = matrix[0].length - 1;int t = 0, b = matrix.length - 1;List<Integer> list = new ArrayList<>();while (true) {for (int i = l; i <= r; i++) {list.add(matrix[t][i]); // left to right}if (++t > b) break;for (int i = t; i <= b; i++) {list.add(matrix[i][r]);}if (l > --r) break;for (int i = r; i >= l; i--) {list.add(matrix[b][i]);}if (t > --b) break;for (int i = b; i >= t; i--) {list.add(matrix[i][l]);}if (++l > r) break;}return list;}
}

旋转图像

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

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

在这里插入图片描述
在这里插入图片描述

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;for (int i = 0; i < n / 2; i++) {for (int j = 0; j < (n + 1)/ 2; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[n - 1- j][i];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] = temp;}}}
}

搜索二维矩阵 II

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

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

在这里插入图片描述

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int i = matrix.length - 1, j = 0;while (i >= 0 && j < matrix[0].length) {if (matrix[i][j] > target) {i--;} else if (matrix[i][j] < target) {j++;} else return true;}return false;}
}

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

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

相关文章

关于UDP协议

UDP协议是基于非连接的发送数据就是把数据包简单封装一下&#xff0c;然后从网卡发出去就可以&#xff0c;数据包之间没有状态上的联系&#xff0c;UDP处理方式简单&#xff0c;所以性能损耗非常少&#xff0c;对于CPU、内存资源的占用远小于TCP&#xff0c;但是对于网络传输过…

【OJ比赛日历】快周末了,不来一场比赛吗? #03.23-03.29 #16场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2024-03-23&#xff08;周六&#xff09; #7场比赛2024-03-24…

74CMS人才系统 CVE-2024-2561 RCE复现

Fofa语法 app"骑士-74CMS" 复现步骤 前期准备 主页长这样 需要先会员注册&#xff0c;注册为招聘者 复现 将poc贴入修改登录的Cookie信息和Token 访问查看 微信公众号 扫一扫关注CatalyzeSec公众号 我们一起来从零开始学习网络安全 加入我们的星球&#xff0c;…

zabbix企业微信的告警媒介配置

简介&#xff1a; Zabbix企业微信告警媒介可用于向特定群组成员发送提醒通知。 前提条件&#xff1a; 完成Zabbix告警平台的搭建后&#xff0c;需将群机器人添加至告警提醒群中。 企业微信群聊——右上角三个点——添加群机器人 保存好产生的webhook地址&#xff08;注意&…

2024.3.20 使用maven打包jar文件和保存到本地仓库

2024.3.20 使用maven打包jar文件和保存到本地仓库 使用maven可以很方便地打包jar文件和导入jar文件&#xff0c;同时还可以将该文件保存在本地仓库重复调用。 使用maven打包jar文件和保存到本地仓库 package打包文件。 install导入本地仓库。 使用maven导入jar文件 点击“…

CVE-2023-49442 jeecg-formdemocontroller JNDI代码执行漏洞分析

漏洞描述 JEECG(J2EE Code Generation) 是开源的代码生成平台&#xff0c;目前官方已停止维护。JEECG 4.0及之前版本中&#xff0c;由于 /api 接口鉴权时未过滤路径遍历&#xff0c;攻击者可构造包含 ../ 的url绕过鉴权。攻击者可构造恶意请求利用 jeecgFormDemoController.do…

P1596 [USACO10OCT] Lake Counting S(找连通块数量)

题目描述 Due to recent rains, water has pooled in various places in Farmer Johns field, which is represented by a rectangle of N x M (1 < N < 100; 1 < M < 100) squares. Each square contains either water (W) or dry land (.). Farmer John would l…

基于springboot的反诈宣传平台

技术&#xff1a;springbootmysqlvue 一、系统背景 反欺诈平台可以对公交信息进行集中管理&#xff0c;可以真正避免传统管理的缺陷。反欺诈平台是一款运用软件开发技术设计实现的应用系统&#xff0c;在信息处理上可以达到快速的目的&#xff0c;不管是针对数据添加&#xff…

Vue3 进阶

Vue 进阶 前言 Vue3 入门文章地址&#xff1a;Vue3 入门 任务一 创建 Vite Vue3 单页应用 Vue 3 是一个流行的 JavaScript 前端框架&#xff0c;用于构建单页应用程序&#xff08;SPA&#xff09;。 下面是一些创建 Vue 3 单页应用程序的方式&#xff1a; Vue CLI&#…

NCV12711ADNR2G芯片PWM控制器中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV12711是一款固定频率、峰值电流模式PWM控制器&#xff0c;具有实施单端功率转换器拓扑结构所需的必要性能。这款器件工作电压范围4V至45V&#xff0c;无需辅助绕组&#xff0c;且位于热性能范围内。这款控制器包含一个可编程振荡器&#xff0c;能够在…

elasticsearch安装部署

elasticsearch部署 安装elasticsearch1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1.部署2.2.DevTools 3.安装IK分词器3.1.在线安装ik插件&#xff08;较慢&#xff09;3.2.离线安装ik插件&#xff08;推荐&#xff09;3.3 扩展词词典3.4 停用词词典 4.部署es…

Jmeter接口登录获取参数token报错问题解决方案

Jmeter接口登录时获取到的参数token一直在变的问题&#xff0c;导致运行时总是报错 解决方法如下&#xff1a; 1.新建一个GET的HTTP请求 2.添加正则表达式提取器 记得name"_token" value"(.?) 中间有一个空格&#xff0c;“_token”和value中间的空格&#xf…

Linux第81步_使用“互斥体”实现“互斥访问”共享资源

1、创建MyMutexLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyMutexLED回车”&#xff0c;创建“MyMutexLED”目录 输入“ls回车”查看“/home/zgq/linux/Linux_Drivers/”目录下的文件和文件夹 2、…

机器学习-可解释性机器学习:支持向量机与fastshap的可视化模型解析

一、引言 支持向量机(Support Vector Machine, SVM)作为一种经典的监督学习方法&#xff0c;在分类和回归问题中表现出色。其优点之一是生成的模型具有较好的泛化能力和可解释性&#xff0c;能够清晰地展示特征对于分类的重要性。 fastshap是一种用于快速计算SHAP值&#xff08…

进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程

进程控制 创建进程&#xff0c;撤销进程&#xff0c;实现进程转换&#xff08;必须一气呵成&#xff0c;使用原语&#xff09; 原语不被中断是因为有关中断指令 创建进程 撤销进程 进程创建fork fork&#xff08;&#xff09;函数会创建一个子进程&#xff0c;子进程会返…

Uibot6.0 (RPA财务机器人师资培训第2天 )采购付款——网银付款机器人案例实战

训练网站&#xff1a;泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981(本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff0…

网络编程day7

学生管理系统系统 #include <myhead.h> int do_add(sqlite3 *ppDb) {int add_numb0;char add_name[20]"";double add_score0;printf("请输入学号&#xff1a;");scanf("%d", &add_numb);printf("请输入姓名&#xff1a;");…

你要的个性化生信分析服务今天正式开启啦!定制你的专属解决方案!全程1v1答疑!

之前在 干货满满 | 给生信小白的入门小建议 | 掏心掏肺版 中有提到&#xff0c;如果小伙伴们真的想学好生信&#xff0c;那编程能力是必须要有的&#xff01;但是可能有些小伙伴们并没有那么多的时间从头开始学习编程&#xff0c;又或是希望有人指导或者协助完成生信分析工作&a…

vue-admin-template极简的 vue admin 管理后台的动态路由实现方法

项目源码地址&#xff1a;GitHub - PanJiaChen/vue-admin-template: a vue2.0 minimal admin template 注意&#xff1a;项目中的路由均写在 src\router\index.js 中&#xff0c;其中默认包含 constantRoutes 数组&#xff0c;这是固定路由&#xff0c;无论用户是什么角色&…

读懂2023微博财报,“大V”们选择留下

2024年2月27日&#xff0c;董宇辉清空了自己158万粉丝的微博账号&#xff0c;无独有偶&#xff0c;此前微博粉丝数超300万的知名刑法教授罗翔老师&#xff0c;也在清空了账号后退出微博&#xff0c;引发全网舆论。如今前者名下的“与辉同行”和“董宇辉”抖音账号分别坐拥1711.…