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

leetcode41. 缺失的第一个正数,原地哈希表

leetcode41. 缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

输入:nums = [1,2,0]
输出:3
解释:范围 [1,2] 中的数字都在数组中。
示例 2:

输入:nums = [3,4,-1,1]
输出:2
解释:1 在数组中,但 2 没有。
示例 3:

输入:nums = [7,8,9,11,12]
输出:1
解释:最小的正数 1 没有出现。

在这里插入图片描述

目录

  • leetcode41. 缺失的第一个正数
  • 题目分析
  • 算法介绍
  • 算法步骤
  • 算法流程
  • 算法代码
  • 算法分析
  • 相似题目

题目分析

这是一个关于数组处理的问题。题目要求实现一个函数firstMissingPositive,该函数接受一个整数数组nums,并返回数组中第一个缺失的正整数。

算法介绍

为了解决这个问题,我们可以使用一种特殊的标记方法。首先,我们将所有小于等于0的元素替换为n+1,其中n是数组的长度。然后,我们遍历数组,将每个元素的正负号反转,如果它是一个正数。通过这种方式,我们可以标记数组中出现的所有正整数。最后,我们再次遍历数组,找到第一个未标记的正整数,即为答案。

算法步骤

  1. 遍历数组nums,将所有小于等于0的元素替换为n+1
  2. 再次遍历数组nums,反转每个元素的正负号,如果它是一个正数。
  3. 第三次遍历数组nums,找到第一个未标记的正整数,即为答案。

算法流程

开始
初始化 n
遍历 nums 替换小于等于0的元素为 n+1
遍历 nums 反转每个元素的正负号 如果它是一个正数
遍历 nums 找到第一个未标记的正整数
返回找到的正整数
结束

算法代码

class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n = nums.size();for (int& num: nums) {if (num <= 0) {num = n + 1;}}for (int i = 0; i < n; ++i) {int num = abs(nums[i]);if (num <= n) {nums[num - 1] = -abs(nums[num - 1]);}}for (int i = 0; i < n; ++i) {if (nums[i] > 0) {return i + 1;}}return n + 1;}
};

算法分析

  • 时间复杂度:O(n),其中n是数组nums的长度。我们只需要遍历数组三次。
  • 空间复杂度:O(1),因为除了输入数组外,我们只使用了常数个额外空间。
  • 易错点
    • 确保正确地将所有小于等于0的元素替换为n+1
    • 在反转正负号时,确保只对正数进行操作。

相似题目

题目链接
缺失的第一个正数LeetCode 41
缺失的数字LeetCode 268

请注意,以上表格仅为示例,实际链接可能需要根据具体平台和题目编号进行调整。

http://www.lryc.cn/news/441519.html

相关文章:

  • 如何准备教师资格证科目三“学科知识与教学能力”的考试与面试?(理科导向:数学/物理)
  • 3.数据类型
  • Xcode报错:No exact matches in reference to static method ‘buildExpression‘
  • 校园安全无小事,EasyCVR视频综合管理平台助力智慧校园视频监控系统全面升级
  • 通过Python代码发送量化交易信号邮件通知
  • 计算机毕业设计 乡村生活垃圾管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • Qwen 2.5:阿里巴巴集团的新一代大型语言模型
  • Element UI入门笔记(个人向)
  • 网络通信失败-关闭网络防火墙
  • 基于kolla-ansible在openEuler 22.03 SP4上部署OpenStack-2023.2
  • 深拷贝|浅拷贝
  • 图像处理-掩码
  • [2025]基于微信小程序慢性呼吸系统疾病的健康管理(源码+文档+解答)
  • react之jsx基础(1)概念和本质
  • sqli-labs靶场自动化利用工具——第13关
  • 大舍传媒:尼日利亚传统新闻媒体宣传助力新兴行业蓬勃发展
  • ISSTA 2024盛大开幕:中国学者的录取数和投稿量均位列第一
  • HttpMediaTypeNotAcceptableException: No acceptable representation问题解决方法
  • Scrapy爬虫框架 Pipeline 数据传输管道
  • vim的 配置文件
  • Golang | Leetcode Golang题解之第403题青蛙过河
  • 前端项目使用js将dom生成图片、PDF
  • 在 Red Hat 上安装 SQL Server 2022 并创建数据库
  • 游戏如何应对云手机刷量问题
  • QTableView使用QSortFilterProxyModel后行号错乱
  • 【Python】 报错Can‘t find model ‘en_core_web_md‘
  • 每天五分钟深度学习框架pytorch:pytorch中已经定义好的损失函数
  • dedecms(四种webshell姿势)、aspcms webshell漏洞复现
  • 【STM32系统】基于STM32设计的智能垃圾桶(语音、颜色识别、称重、光强、烟雾、人体识别、步进电机、水泵)——文末资料下载
  • GPT代码记录