重走力扣hot的矩阵

目录

矩阵置零

螺旋矩阵


矩阵置零

73. 矩阵置零 - 力扣(LeetCode)

法一:

引入两个HashSet容器,分别记录元素为0的横坐标与纵坐标

空:O(M+N)

代码

复制代码
   class Solution_2026_1_26_1 {
        int m;
        int n;
        public void setZeroes(int[][] matrix) {
            Set<Integer> row_zero=new HashSet();
            Set<Integer> col_zero=new HashSet();
            m=matrix.length;
            n=matrix[0].length;
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    if(matrix[i][j]==0){
                        row_zero.add(i);
                        col_zero.add(j);
                    }
                }
            }
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    //Set无get方法
                    if(row_zero.contains(i)||col_zero.contains(j)){
                        matrix[i][j]=0;
                    }

                }
            }


        }
    }

优化:空间复杂度优化为O(1)

重点:区分第一行和第一列的0是本身就是0还是被修改为0的

java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        //进行优化 空间复杂度降低为O(1)
        boolean hasRowZero=false;
        boolean hasColZero=false;
        int m=matrix.length;
        int n=matrix[0].length;
         //检查第一行是否有为0的
         for(int i=0;i<n;i++){
            //检查第一行是否为空 
            //但本质上第一行处理的是列
            if(matrix[0][i]==0){
                hasRowZero=true;
                break;
            }
         }

            for(int i=0;i<m;i++){
            //检查第一列是否为空 
            //但本质上第一列处理的是行
            if(matrix[i][0]==0){
                hasColZero=true;
                break;
            }
         }
         //遍历二维数组 进行标记
         for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(matrix[i][j]==0){
                    matrix[0][j]=0;
                    matrix[i][0]=0;
                }
            }
         }

         for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(matrix[0][j]==0||matrix[i][0]==0){
                    matrix[i][j]=0;
                }
            }
         }
         //单独处理第一行为0的情况
         if(hasRowZero){
            for(int i=0;i<n;i++){
                matrix[0][i]=0;
            }
         }

         if(hasColZero){
            for(int i=0;i<m;i++){
                matrix[i][0]=0;
            }
         }
        
    }
}

螺旋矩阵

54. 螺旋矩阵 - 力扣(LeetCode)

个人认为关键点就是理清除过程,先从左往右处理上边界,然后从上往下处理右边界,然后从右往左处理下边界,最后在从下往上处理左边界即可,理清楚过程即可

java 复制代码
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int m=matrix.length;
        int n=matrix[0].length;
        List<Integer> ret=new ArrayList<>();
        int left=0;
        int right=n-1;
        int top=0;
        int bottom=m-1;
        while(left<=right&&top<=bottom){
            for(int i=left;i<=right;i++){
                ret.add(matrix[top][i]); //从左往右处理
            }
            top++; //从上往下
            for(int i=top;i<=bottom;i++){
                ret.add(matrix[i][right]); //从下往上处理
            }
            right--; //从后往前
            if(top<=bottom){
                for(int i=right;i>=left;i--){
                    //从后往前
                    ret.add(matrix[bottom][i]);
                }
                //从下往上
                bottom--;
            }
            if(left<=right){
                for(int i=bottom;i>=top;i--){
                    ret.add(matrix[i][left]);
                }
                //从前往后
                left++;
            }
        }
        return ret;
    
    }
}
相关推荐
企业数字化笔记7 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!7 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小郎君65810 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧10 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm10 小时前
40 二叉树的直径
c++·leetcode
Shimeri11 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J11 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang11 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖11 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy11 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化