当前位置: 首页 > news >正文

LeetCode 解题思路 9(Hot 100)

在这里插入图片描述

解题思路:

  1. 遍历并调整数组: 对于每个元素 nums[i],若其值为正且不超过数组长度 len,则将其逐步交换到它应该在的位置。
  2. 查找缺失的正整数: 遍历调整后的数组,若某个位置的值不等于其索引加1,则说明 i+1 是最小的缺失正整数。若所有位置均满足 nums[i] = i+1,则说明数组包含1到 len 的所有正整数,此时最小缺失值为 len+1。

Java代码:

public class Solution {
    public int firstMissingPositive(int[] nums) {
        int len = nums.length;

        for (int i = 0; i < len; i++) {
            while (nums[i] > 0 && nums[i] <= len && nums[nums[i] - 1] != nums[i]) {
                swap(nums, nums[i] - 1, i);
            }
        }

        for (int i = 0; i < len; i++) {
            if (nums[i] != i + 1) {
                return i + 1;
            }
        }
        return len + 1;
    }

    private void swap(int[] nums, int index1, int index2) {
        int temp = nums[index1];
        nums[index1] = nums[index2];
        nums[index2] = temp;
    }
}

复杂度分析:

  • 时间复杂度: O(n),外层循环遍历数组一次,时间为O(n)。
  • 空间复杂度: O(1),仅使用了常数级别的额外空间。

在这里插入图片描述

解题思路:

  1. 标记阶段: 使用两个布尔数组row和col分别记录哪些行和列包含零元素。
    遍历整个矩阵,当遇到零元素matrix[i][j]时,将row[i]和col[j]标记为true。
  2. ​置零阶段: 再次遍历矩阵,若当前行i或列j被标记为需要置零(即row[i] || col[j]),则将matrix[i][j]设为0。

Java代码:

class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length;
        boolean[] row = new boolean[m];
        boolean[] col = new boolean[n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == 0) {
                    row[i] = col[j] = true;
                }
            }
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (row[i] || col[j]) {
                    matrix[i][j] = 0;
                }
            }
        }
    }
}

复杂度分析:

  • 时间复杂度: O(mn),其中 m 和 n 分别是矩阵的行数和列数。
  • 空间复杂度: O(m+n),使用两个布尔数组row和col分别记录行和列的标记信息,额外空间与矩阵的行数和列数相关。

相关文章:

  • [python] del
  • 20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡为ext4格式
  • 【Linux】冯诺依曼体系结构-操作系统
  • Stable Diffusion模型采样方法与参数配置详解(含步数及画风适配表)
  • 弧度与角度之间的转换公式
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.3.1 避免频繁更新(Update by Query的代价)
  • 计算机毕业设计SpringBoot+Vue.js社区养老服务平台(源码+文档+PPT+讲解)
  • 命名管道(用命名管道模拟server和client之间的通信)
  • 关于elementui的时间组件与后端时间和oracle数据库时间的对应格式
  • 计算机毕业设计Python小说推荐系统 K-means聚类推荐算法 深度学习 Kears 小说数据分析 可视化 Scrapy爬虫 协同过滤
  • 物业管理系统源码 物业小程序源码
  • 如何将JAR交由Systemctl管理?
  • 扩展用户空间
  • 甘特图开发代码(测试版)
  • 伍[5],伺服电机,电流环,速度环,位置环
  • SQL经典常用查询语句
  • c++ cin输入流的使用总结
  • Docker概念与架构
  • LangGraph实战:构建智能文本分析流水线
  • AI-Ollama本地大语言模型运行框架与Ollama javascript接入
  • 茂名网站建设公司/小红书关键词优化
  • 网站建设学费要多少/怎么做表格
  • 手机网站模板欣赏/2345网址大全
  • 海口有做棋牌娱乐网站的吗/数据分析师报考条件
  • 网站建设完成/百度一下知道官网
  • 丹东网站建设/深圳百度地图