矩阵置零(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之矩阵的更多相关文章

  1. C语言 · 矩阵乘法 · 算法训练

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  2. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  3. CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换

    CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换 三维世界里的旋转(rotate),可以用一个3x3的矩阵描述:可以用(旋转角度float+旋转轴vec3)描述.数学家欧拉证明了这两种形式可 ...

  4. “为什么DirectX里表示三维坐标要建一个4*4的矩阵?”

    0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...

  5. js实现蛇形矩阵

    参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条js程序题,其他半点前端都没有,都是考算法,计算机原理,数据结构.下面贴上腾讯笔试最后三大条中的一条,实现一个蛇形矩阵的输出.蛇形矩阵的什么样这里我 ...

  6. ACM 中 矩阵数据的预处理 && 求子矩阵元素和问题

            我们考虑一个$N\times M$的矩阵数据,若要对矩阵中的部分数据进行读取,比如求某个$a\times b$的子矩阵的元素和,通常我们可以想到$O(ab)$的遍历那个子矩阵,对它的各 ...

  7. PAT 1050. 螺旋矩阵(25)

    本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...

  8. [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 ...

  9. [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 ...

  10. [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 ...

随机推荐

  1. Oracle 修改SYS、system用户密码

      by:授客 QQ:1033553122 概念 SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户.在数据库安装完之后,应立即修改SYS,SYSTEM这两个用户的密码 ...

  2. 使用Docker部署服务

    一.Docker概念 1.操作系统层面的虚拟化技术 2.隔离的进程独立于宿主和其它的隔离的进程 - 容器 3.GO语言开发 4.特点:高效的利用系统资源:快速的启动时间:一致的运行环境:持续交付和部署 ...

  3. RealSense .bag文件彩色图,深度图提取

    RealSense .bag文件彩色图,深度图提取 代码 import roslib import rosbag import rospy import cv2 import os from sens ...

  4. C 语言内存布局深度剖析:从栈到堆,你真的了解吗?

    大家好,我是小康. 今天咱们聊点看似复杂实则简单的东西 -- C 语言的内存布局. 别急着翻页!相信我,读完这篇文章,你会拍着大腿说:"原来这么简单!" 微信搜索 「跟着小康学编程 ...

  5. JDK8-日历类--java进阶day07

    JDK7和JDK8之间的时间API比较 1.日历类 1.LocalDateTime LocalDateTime最为齐全,只要掌握这个类,另外两个都是一样的 now方法获取到此刻时间,of方法设置想要的 ...

  6. 【Python】词频统计

    需求:一篇文章,出现了哪些词?哪些词出现得最多? 英文文本词频统计 英文文本:Hamlet 分析词频 统计英文词频分为两步: 文本去噪及归一化 使用字典表达词频 代码: #CalHamletV1.py ...

  7. CountDownLatch的countDown()方法的底层源码

    一.CountDownLatch的构造方法 // 创建倒数闩,设置倒数的总数State的值 CountDownLatch doneSignal = new CountDownLatch(N); 二.c ...

  8. 解释Spring框架中bean的生命周期

    一.Bean生命周期的流程图 二.spring的生命周期 spring生命周期中的阶段,包括初始化.使用.销毁. 1.初始化阶段 1)调用bean的构造函数,创建实例: 2)进行参数依赖注入: 3)若 ...

  9. 树莓派智能摄像头实战指南:基于TensorFlow Lite的端到端AI部署

    引言:嵌入式AI的革新力量 在物联网与人工智能深度融合的今天,树莓派这一信用卡大小的计算机正在成为边缘计算的核心载体.本文将手把手教你打造一款基于TensorFlow Lite的低功耗智能监控设备,通 ...

  10. Vue之“表单修饰符”

    1.lazy:失去焦点时处理 案例1 2.number:限制只能输入数字 案例1 3.trim:去掉前后空格 案例1