hot100之矩阵
矩阵置零(073)
先看代码
class Solution {
public void setZeroes(int[][] matrix) {
boolean col0_flag = false;
int row = matrix.length;
int col = matrix[0].length;
for (int i = 0; i < row; i++){
if (matrix[i][0] == 0) col0_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 (col0_flag) matrix[i][0] = 0;
}
}
}
- 分析
利用矩阵自身作为标记位 , 矩阵第0行标记每一列是否被污染, 第0列标记每一行
接下来来处理0行0列自身是否会被污染, 0行我们可以使用(0,0)做标记, 0列额外用col0_flag
螺旋矩阵(054)
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
int lef = 0, rig = matrix[0].length -1;
int top = 0, but = matrix.length -1;
int idx = 0;
Integer[] res = new Integer[(rig+1)*(but+1)];
while(true){
for (int i = lef; i <= rig; i++) res[idx++] = matrix[top][i];
if (++top > but) break;
for (int i = top; i <= but; i++) res[idx++] = matrix[i][rig];
if (--rig < lef) break;
for (int i = rig; i >= lef; i--) res[idx++] = matrix[but][i];
if (--but < top) break;
for (int i = but; i >= top; i--) res[idx++] = matrix[i][lef];
if (++lef > rig) break;
}
return Arrays.asList(res);
}
}
- 分析
简单围绕 (第0行→最后一列→最后一行 → 第0列)循环写入
旋转图像(048)
先看代码
class Solution {
int n;
public void rotate(int[][] matrix) {
n = matrix.length;
for (int i = 0; i < n; i++){
for (int j = i; j < n; j++){
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
for (int[] row : matrix){
reverse(row);
}
}
private void reverse(int[] row){
int i = 0, j = n-1;
while (i < j){
int temp = row[i];
row[i] = row[j];
row[j] = temp;
i++;
j--;
}
}
}
- 分析
先以对角线翻转, 再每行各自翻转
- 感悟
数学真神奇把
搜索二维矩阵(240)
先看代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
int row = 0, col = n - 1;
while (row < m && col >=0){
if (target > matrix[row][col]) row+=1;
else if (target < matrix[row][col]) col-=1;
else return true;
}
return false;
}
}
- 分析
从右上角开始搜索, 利用矩阵从左到右递增、从上到下递增的特性, 每次比较可以排除一行或一列, 时间复杂度O(m+n)。
hot100之矩阵的更多相关文章
- C语言 · 矩阵乘法 · 算法训练
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
- 获取Canvas当前坐标系矩阵
前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...
- CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换
CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换 三维世界里的旋转(rotate),可以用一个3x3的矩阵描述:可以用(旋转角度float+旋转轴vec3)描述.数学家欧拉证明了这两种形式可 ...
- “为什么DirectX里表示三维坐标要建一个4*4的矩阵?”
0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...
- js实现蛇形矩阵
参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条js程序题,其他半点前端都没有,都是考算法,计算机原理,数据结构.下面贴上腾讯笔试最后三大条中的一条,实现一个蛇形矩阵的输出.蛇形矩阵的什么样这里我 ...
- ACM 中 矩阵数据的预处理 && 求子矩阵元素和问题
我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各 ...
- PAT 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
- [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- [LeetCode] Longest Increasing Path in a Matrix 矩阵中的最长递增路径
Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...
- [LeetCode] Smallest Rectangle Enclosing Black Pixels 包含黑像素的最小矩阵
An image is represented by a binary matrix with 0 as a white pixel and 1 as a black pixel. The black ...
随机推荐
- 公安部网防G01-网站安全卫士软件/linux防御
公安部网防G01-该软件免费使用,安装在网站服务器上,利用操作系统内核加固和主机web流量过滤技术,有效检测并抵御网页篡改.SQL注入.漏洞攻击.暴力破解.木马控制.XSS跨站.CC拒绝服务.系统提权 ...
- 【Docker】常用服务镜像安装
Docker常用安装 总体步骤 搜索镜像:docker search xxx 拉取镜像:docker pull xxx 查看镜像:docker images 启动镜像:docker run xxx 停 ...
- css标签名
标签 功能介绍 p 标签选择器 #id id选择器 .class class选择器 * 通用选择器 p,a 多个标签选择器 p a 后代选择器 p>a 子代选择器 p+a 紧挨着p后面的a选择器 ...
- 【C语言】Linux 飞翔的小鸟
[C语言]Linux 飞翔的小鸟 零.环境部署 安装Ncurses库 sudo apt-get install libncurses5-dev 壹.编写代码 代码如下: bird.c #include ...
- DevOps系列——Gitlab私服
Gitlab/GitHub是两兄弟,但GitHub本着共享技术的精神,私有库是要钱滴,而且代码放别人家里,晚上总是有点睡不踏实, 来个代码泄露或者突然被区别对待,比如GitHub断供来自伊朗.叙利亚的 ...
- Markdown 中如何添加图片
语法  alt text:可选,图片标签,用来描述的关键词,图片加载错误时候的替代文本,也可用于SEO. uri: ...
- Oracle for 循环
Oracle for in loop 循环的一些实例,以作学习和加强使用熟练度及场景应用. 一些技巧 for 语句后面的 loop end loop 可以类比成 c#/java 等编程语言 for 语 ...
- 如何使用 OpenAI Agents SDK 构建 MCP
1.概述 OpenAI Agents SDK 现已支持 MCP(模型上下文协议),这是 AI 互操作性的重大变革.这使开发人员能够高效地将 AI 模型连接到外部工具和数据源.本篇博客,笔者将指导使用 ...
- MCP技术:渗透测试从自动化到智能化
在人工智能快速发展的今天,如何让AI更高效地与现实世界交互,成为许多开发者和研究者关注的焦点.MCP(Model Context Protocol)技术作为一种创新的工具集成方案,为AI提供了一种&q ...
- zk源码—2.通信协议和客户端原理
大纲 1.ZooKeeper如何进行序列化 2.深入分析Jute的底层实现原理 3.ZooKeeper的网络通信协议详解 4.客户端的核心组件和初始化过程 5.客户端核心组件HostProvider ...