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

news2024/11/13 9:22:58

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.coloradmin.cn/o/2147634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于JavaSwing实现的酒店管理系统

一、项目介绍 > 欢迎使用酒店管理系统&#xff01; > 这是一个基于Java Swing开发&#xff0c;用于管理酒店预订、房间、订单和用户信息的系统。 > 适用于JAVA初学者作为入门学习项目。 二、项目演示 三、基础依赖 技术/框架版本描述Java8编程语言MySQL8.0数据…

ATGM331C-5T杭州中科微全星座定位授时模块电气参数

ATGM331C-5T 系列模块通过 UART 作为主要输出通道&#xff0c;按照 NMEA0183 的协议格式输出。 产品选型&#xff1a; 性能指标&#xff1a; 出色的定位导航功能&#xff0c;支持 BDS/GPS 卫星导航系统的单系统授时&#xff0c;以及任意组合的多系统联合定位&#xff0c;并支持…

yolov5/8/9/10模型在VOC数据集上的应用【代码+数据集+python环境+GUI系统】

yolov5/8/9/10模型在VOC数据集上的应用【代码数据集python环境GUI系统】 1.背景意义 VOC数据集被广泛应用于计算机视觉领域的研究和实验中&#xff0c;特别是目标检测和图像识别任务。许多知名的目标检测算法都使用VOC数据集进行训练和测试。VOC挑战赛&#xff08;VOC Challeng…

倍增练习(1)

A - ST 表 && RMQ 问题 题目思路:st表的板子题用于静态区间求最值,通过倍增的思想,先通过预处理将各个区间的最大值通过转移式求出f[i][j] max(f[i][j - 1], f[i (1 << (j - 1))][j - 1]);然后再进行重叠查询查询,k log2(r - l 1);,max(f[l][k], f[r - (1 &l…

js中两种异步方式:async+await以及then

第一种方式 第二种方式 完整代码 前端代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>pywebv…

金手指设计

"MCP6294"。是一个轨到轨, 带宽为 10MHz 的 低功耗放大器. 对LM358测量 10MHz 范围内的频率特性&#xff0c;在 8MHz 左右&#xff0c;输出相移超过了 180。MCP6294的频率特性&#xff0c;则显示在 10MHz 运放相移之后 100左右。 对比两个运放的频率特性&#xff…

LLM - 理解 多模态大语言模型(MLLM) 的 预训练(Pre-training) 与相关技术 (三)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142167709 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…

深入 mysql,掌握一对一、一对多、多对多表设计、查询及级联操作

数据库表的基本概念与关系 数据库通常包含多个表&#xff0c;每个表存储特定类型的信息。例如&#xff1a; 学生表&#xff1a;存储学生信息。老师表&#xff1a;存储老师信息。班级表&#xff1a;存储班级信息。 这些表通过各种关系连接&#xff0c;形成一个结构化的数据管…

vscode关闭git的提交提示

问题描述&#xff1a; vscode中光标停留在每一行都会有出现git仓库的提交信息&#xff0c;影响代码阅读。 解决方法&#xff1a; 左下角设置齿轮&#xff1a; 输入关键词commit input 取消勾选&#xff0c;即可解决。

判断n是否为两素数相乘

要求 请编写函数fun&#xff0c;其功能是:验证参数n是否可以分解成2个素数相乘&#xff0c;是则返回1&#xff0c;否则返回0&#xff0c;并通过指针变更x、y返回分解后的2个素数值&#xff0c;要求*x<*y。主程序中将打印出分解结果。 例如:1113*37&#xff0c;当函数fun的参…

Web APIs 第二天

第二天&#xff1a;DOM事件基础&#xff0c;注册事件&#xff0c;tab栏切换 添加事件监听 <body><button>点击</button><script>const btn document.querySelector(button)btn.addEventListener(click, function () {alert(嗲你)})</script> …

数据结构-3.3.栈的链式存储实现

一.链栈的定义&#xff1a; 二.总结&#xff1a;

Net8 调用BarTender2022 R8

先上效果图 官方只能支持.net framework&#xff0c;不支持.netCore 参考链接 https://support.seagullscientific.com/hc/en-us/community/posts/14770890037911-Support-for-NET-6 https://support.seagullscientific.com/hc/en-us/community/posts/360046932953-Make-SDK…

Web开发:ABP框架2——入门级别的增删改查Demo

目录 一、前言 二、上节回顾 ​编辑 三、新建Dto和添加映射 1.新建dto 2.添加映射规则 四、新建WebApi控制器用EFcore进行增删改查 1.新建Webapi控制器接口 2.新建Webapi控制器实现 3.跑项目测试 五、WebApi控制器调用底层代码 1.webapi控制器&#xff08;高层代码&…

JZ2440开发板——S3C2440的存储控制器

以下内容源于韦东山课程的学习与整理&#xff0c;如有侵权请告知删除。 课程中说的“内存控制器”&#xff0c;准确来说是“存储控制器”&#xff0c;其配套书籍写的也是“存储控制器”。 另外“Nor Flash控制器”&#xff0c;说的也是“存储控制器”&#xff0c;或者“存储控…

C++日期类,详细!!!

日期类的练习可以巩固提高之前所学习的知识&#xff0c;还可以完成关于的日期练习 下面是关于日期的对应oj题 KY111 日期差值 计算一年的第几天 累加天数 1.Date.h 头文件部分 看看我们要实现那些接口 1.获取对应月份的天数:GetMonthDay 2. < > …

pybind11 学习笔记

pybind11 学习笔记 0. 一个例子1. 官方文档1.1 Installing the Library1.1.1 Include as A Submodule1.1.2 Include with PyPI1.1.3 Include with Conda-forge 1.2 First Steps1.2.1 Separate Files1.2.2 PYBIND11_MODULE() 宏1.2.3 example.cpython-38-x86_64-linux-gnu.so 的…

轴承表面缺陷检测系统源码分享

轴承表面缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

GUI编程17:下拉框、列表框

视频链接&#xff1a;19、下拉框、列表框_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p19&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.下拉框 代码示例 package com.yundait.lesson06;import javax.swing.*; import java.awt.*;public class Te…

Docker实践——天池篇

参考零基础入门Docker-cuda练习场_学习赛_天池大赛-阿里云天池的赛制 (aliyun.com) ​ 在Docker零基础入门-CSDN博客中我已经安装了docker,现在开始创建自己的镜像仓库。 1. 开通阿里云容器镜像服务(镜像仓库) 进入容器镜像服务 (aliyun.com) 1.1. 创建个人实例 点击“…