力扣打卡day09——缺失的第一个正数、矩阵置零

41. 缺失的第一个正数 - 力扣(LeetCode)

思路:

/**

创建一个标记数组

把出现过的正数标记为 1

找第一个没标记(0)的位置

返回它对应的数字

*/

复制代码
class Solution {
    public int firstMissingPositive(int[] nums) {
        /**
        创建一个标记数组
        把出现过的正数标记为 1
        找第一个没标记(0)的位置
        返回它对应的数字
         */
         int n=nums.length;
         if(n==0) return 1;
         int number[]=new int[n];

         for(int i=0;i<n;i++){
            //结果的数据只能在1~n+1里面, 大于n 的没必要看了
            if(nums[i]>0 && nums[i]<=n){
                number[nums[i]-1]=1;// 把出现过的正数标记为 1
            }
         }
         //找第一个没标记(0)的位置
         for(int i=0;i<n;i++){
            if(number[i]==0){
                return i+1;
            }
         }
         //数组都满了,结果就是n+1
         return n+1;  
    }
}

/** 
     直接暴力解法
**/
class Solution {
    public int firstMissingPositive(int[] nums) {
        Set<Integer> set=new HashSet<Integer>();
        for(int i=0;i<nums.length;i++){
            set.add(nums[i]);
        }
        int i=1;
        while(set.contains(i)){
            i++;
        }
        return i;
    }
}

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

思路:

思路一: 用 O(m+n)额外空间

两遍扫matrix,第一遍用集合记录哪些行,哪些列有0;第二遍置0

复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
       Set<Integer> row_set=new HashSet<>();
       Set<Integer> col_set=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_set.add(i);
                col_set.add(j);
            }
        }
       }
       //将行列置为0
       for(int i=0;i<row;i++){
        for(int j=0;j<col;j++){
            if(row_set.contains(i) || col_set.contains(j)){
                 matrix[i][j]=0;
            }
        }
    }
}
}

思路二: 用O(1)空间

关键思想: 用matrix第一行和第一列记录该行该列是否有0,作为标志位

但是对于第一行,和第一列要设置一个标志位,为了防止自己这一行(一列)也有0的情况.注释写在代码里,直接看代码很好理解!

复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int row_len=matrix.length;
        int col_len=matrix[0].length;
        boolean row_flag=false;
        boolean col_flag=false;

        //记录第一行是否有0
        for(int j=0;j<col_len;j++){
            if(matrix[0][j]==0){
                row_flag=true;
                break;
            }
        }
        //记录第一列是否有0
        for(int j=0;j<row_len;j++){
            if(matrix[j][0]==0){
                col_flag=true;
                break;
            }
        }
        //进行标志位的计算
        for(int i=1;i<row_len;i++){
            for(int j=1;j<col_len;j++){
                if(matrix[i][j]==0){
                    matrix[0][j]=matrix[i][0]=0;
                }
            }
        }
        //进行放置0
        for(int i=1;i<row_len;i++){
            for(int j=1;j<col_len;j++){
                if(matrix[i][0]==0 || matrix[0][j]==0){
                    matrix[i][j]=0;
                }
            }
        }
         
        if(row_flag){
            for(int j=0;j<col_len;j++){
                 matrix[0][j]=0;
            }
        }
        if(col_flag){
            for(int i=0;i<row_len;i++){
                matrix[i][0]=0;
            }
        }
        
    }
}
相关推荐
鶴哥只手遮天2 分钟前
OpenFOAM 源码深度剖析 · 第二季-14 `functionObjects`、求解器控制框架 与 表达式系统
算法·开源
鶴哥只手遮天2 分钟前
OpenFOAM 源码深度剖析 · 第二季-13 `fvOptions` / `fvConstraints` / `corrections`
算法·开源
鶴哥只手遮天4 分钟前
OpenFOAM 源码深度剖析 · 第二季-03 拉格朗日粒子与喷雾:`Cloud`/`parcel` 模板体系、运动积分与子模型群
算法·开源
hetao173383710 分钟前
校内场-提高组 ZYZSC-S-Round 2
c++·算法
小严不想当码农11 分钟前
icpc 亚洲区域赛补题链接整理
算法
xiaok12 分钟前
Compositor图编辑器
算法
CAD开发小慧19 分钟前
CAE软件开发:Coreform为何用ACIS处理CAD几何?
算法·架构·计算机图形学
七牛云行业应用23 分钟前
DeepSeek Harness 自定义 Skill 教程:从 SKILL.md 到可复用 Agent 工作流
算法·github
hetao173383727 分钟前
2026-10-14 hetao1733837 的刷题记录
c++·算法
罗斯83941 分钟前
Datalog与安全分析
算法·安全·网络安全