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

每日一题——缺失的第一个正整数

缺失的第一个正整数

    • 题目描述
      • 进阶:
      • 数据范围:
    • 示例
      • 示例 1
      • 示例 2
      • 示例 3
    • 题解
      • 思路
      • 代码实现
      • 代码解释
      • 复杂度分析
      • 总结

题目描述

给定一个无重复元素的整数数组 nums,请你找出其中没有出现的最小的正整数。

进阶:

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

数据范围:

  • 数组元素 nums[i] 的值在 − 2 31 ≤ n u m s [ i ] ≤ 2 31 − 1 -2^{31} \leq nums[i] \leq 2^{31} - 1 231nums[i]2311 之间。
  • 数组长度 len(nums) 满足 0 ≤ l e n ( n u m s ) ≤ 5 × 1 0 5 0 \leq len(nums) \leq 5 \times 10^5 0len(nums)5×105

示例

示例 1

输入:

[1, 0, 2]

输出:

3

示例 2

输入:

[-2, 3, 4, 1, 5]

输出:

2

示例 3

输入:

[4, 5, 6, 8, 9]

输出:

1

题解

本题的关键点是寻找数组中最小的缺失正整数。由于数组中没有重复的元素,我们可以利用数组下标和数值之间的关系来进行处理。具体步骤如下:

思路

  1. 无效值处理

    • 数组中值小于等于0或大于数组长度的数值不可能是我们要找的最小正整数,可以将它们替换为一个不会影响结果的数字(例如 numsSize + 1)。
  2. 就地交换

    • 数组中的每个数字应该位于它应处的位置。例如,数字 1 应该位于索引 0,数字 2 应该位于索引 1,以此类推。
    • 我们通过交换将数字放到正确的位置上。
  3. 查找缺失的最小正整数

    • 遍历数组,找到第一个没有正确放置的数字,返回它的索引对应的正整数。
    • 如果所有的数字都正确放置了,说明数组中包含了所有从 1numsSize 的正整数,那么最小缺失正整数为 numsSize + 1

代码实现

#include <stdio.h>
#include <stdlib.h>/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param nums int整型一维数组 * @param numsLen int nums数组长度* @return int整型*/
int minNumberDisappeared(int* nums, int numsLen) {// 1. 将所有不合法的数值替换为 numsLen + 1for (int i = 0; i < numsLen; i++) {if (nums[i] <= 0 || nums[i] > numsLen) {nums[i] = numsLen + 1;}}// 2. 将每个数值放到它应该在的位置上for (int i = 0; i < numsLen; i++) {int num = abs(nums[i]);  // 获取当前值的绝对值if (num <= numsLen && nums[num - 1] > 0) {nums[num - 1] = -nums[num - 1]; // 标记 num 已经出现}}// 3. 查找第一个没有标记的正整数for (int i = 0; i < numsLen; i++) {if (nums[i] > 0) {return i + 1; // 返回缺失的第一个正整数}}// 4. 如果没有缺失,返回 numsSize + 1return numsLen + 1;
}

代码解释

  1. 无效值处理

    if (nums[i] <= 0 || nums[i] > numsLen) {nums[i] = numsLen + 1;
    }
    
    • 将数组中所有小于等于0或大于 numsLen 的数值替换为 numsLen + 1,因为这些数值不可能是我们要找的最小正整数。
  2. 就地交换

    int num = abs(nums[i]);
    if (num <= numsLen && nums[num - 1] > 0) {nums[num - 1] = -nums[num - 1]; // 标记为已出现
    }
    
    • 对于每个数字 num,我们将它放到应该在的位置(即 num-1 的位置)。如果 num 在数组范围内并且当前位置的数字是正数,就将该位置标记为负数,表示该数值已出现。
  3. 查找缺失的最小正整数

    if (nums[i] > 0) {return i + 1; // 返回缺失的第一个正整数
    }
    
    • 如果遍历完数组后,遇到第一个正数,说明该索引对应的正整数是缺失的最小正整数。
  4. 返回结果

    • 如果所有 1numsLen 的整数都已经出现,则返回 numsLen + 1

复杂度分析

  • 时间复杂度O(n),其中 n 是数组的长度。我们遍历数组三次:一次处理无效值,一次进行就地交换,一次查找缺失的最小正整数。
  • 空间复杂度O(1),除了输入数组外,没有使用额外的空间,所有操作都在原数组上进行。

总结

难得的一道简单的题目。。

相关文章:

每日一题——缺失的第一个正整数

缺失的第一个正整数 题目描述进阶&#xff1a;数据范围&#xff1a; 示例示例 1示例 2示例 3 题解思路代码实现代码解释复杂度分析总结 题目描述 给定一个无重复元素的整数数组 nums&#xff0c;请你找出其中没有出现的最小的正整数。 进阶&#xff1a; 时间复杂度&#xff…...

CEF132 编译指南 MacOS 篇 - 基础开发工具安装实战 (二)

1. 引言 在 macOS 平台上编译 CEF132 之前&#xff0c;首要任务是搭建一个完善的开发环境。与 Windows 和 Linux 环境不同&#xff0c;macOS 的开发环境主要以 Xcode 为核心。本篇将作为 CEF132 编译指南系列的第二篇&#xff0c;详细指导读者如何在 macOS 系统上安装和配置 X…...

vi 是 Unix 和 Linux 系统中常用的文本编辑器

vi是 Unix 和 Linux 系统中常用的文本编辑器&#xff0c;它有几种不同的模式&#xff0c;其中最常用的是命令模式和插入模式。光标控制主要在命令模式下进行&#xff0c;以下是一些常用的vi命令来控制光标位置&#xff1a; • h,j,k,l&#xff1a;分别用于将光标向左、向下、向…...

SwanLab x verl:可视化LLM强化学习后训练教程

文章目录 介绍Verl和SwanLab1. 环境安装2. 使用方法3. 查看训练日志 介绍Verl和SwanLab verl 是一个灵活、高效且可用于生产环境的强化学习&#xff08;RL&#xff09;训练框架&#xff0c;专为大型语言模型&#xff08;LLMs&#xff09;的后训练设计。它由字节跳动火山引擎团…...

职场到校园,初心未改:我的2024年

Hi&#xff0c;大家好&#xff0c;我是几何心凉。 其实早就想写一份复盘文章&#xff0c;正好借助2024年度博客之星的评选机会&#xff0c;来写下这篇总结。回望过去&#xff0c;感慨颇多。自从加入CSDN平台以来&#xff0c;已经见证了许多博主的来去匆匆&#xff0c;各类创作…...

C++基础知识学习记录—引用

1、引用的概念 概念&#xff1a;引用相当于给变量取个别名 对引用进行操作与直接操作变量相同&#xff0c;注意引用类型与变量类型一致 #include<iostream> using namespace std; int main(){int a10;int& cite_a a;//操作引用cite_a 与操作变量a完全一样cout &l…...

AWS Savings Plans 监控与分析工具使用指南

一、背景介绍 1.1 什么是 Savings Plans? AWS Savings Plans 是一种灵活的定价模式,通过承诺持续使用一定金额的 AWS 服务来获得折扣价格。它可以帮助用户降低 AWS 使用成本,适用于 EC2、Fargate 和 Lambda 等服务。 1.2 为什么需要监控? 优化成本支出跟踪使用情况评估投…...

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图&#xff0c;清晰易懂形象直观&#xff0c;记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》&#xff0c; 文章链接&#xff1a;https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…...

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…...

【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案

建筑设计公司在项目执行过程中&#xff0c;会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。 操作需求&#xff1a;为了方便内部管理和向客户交付完整的设计方案&#xff0c;公司需要将每个项目文件…...

前端学习之Flex布局

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Flex布局示例</title><style>.conta…...

游戏引擎学习第97天

回顾昨天并计划今天 在这期节目中&#xff0c;主要讲解了光照的概念&#xff0c;并进一步讨论了法线贴图光照的实现。节目的内容大致分为几个部分&#xff1a; 光照的基础概述&#xff1a;讨论了光的工作原理以及如何在编程图形时需要考虑光照问题。尽管这些概念并没有深入到…...

Mysql中存储引擎各种介绍以及应用场景、优缺点

概述 MySQL 提供了多种存储引擎&#xff0c;每种引擎有不同的特点和适用场景。以下是几种常见的 MySQL 存储引擎的详细介绍&#xff0c;包括它们的底层工作原理、优缺点&#xff0c;以及为什么 MySQL 默认选择某种引擎。 1. InnoDB 底层工作原理&#xff1a; 事务支持&#…...

PHP 运算符

PHP 运算符 概述 PHP 是一种广泛使用的开源服务器端脚本语言,它具有丰富的运算符集,这些运算符是编写 PHP 程序的基础。运算符用于执行各种数学、逻辑和比较操作。本篇文章将详细介绍 PHP 中常用的运算符,包括算术运算符、比较运算符、逻辑运算符、赋值运算符等。 算术运…...

Vue全流程--Vue3.0与Vue2.0响应式原理对比

Vue2中数据的响应式 需要使用Vue.set这么一个api&#xff0c;修改数据 需要使用Vue.delete这么一个api&#xff0c;删除数据 数据代理这个当面的理解可以看看我前面文章Vue全流程--数据代理的理解以及在Vue中的应用-CSDN博客 Vue3中数据的响应式 Vue3使用proxy这个api实现…...

C语言学习笔记:子函数的调用实现各个位的累加和

在C语言程序学习之初&#xff0c;我们都会学习如何打印 hello world&#xff0c;在学习时我们知道了int main&#xff08;&#xff09;是主函数&#xff0c;程序从main函数开始执行&#xff0c;这是流程控制的一部分内容。在主函数中我们想要实现一些功能&#xff0c;比如求各个…...

【大模型】本地部署DeepSeek-R1:8b大模型及搭建Open-WebUI交互页面

本地部署DeepSeek-R1:8b大模型 一、摘要及版本选择说明1.1 摘要1.2 版本选择 二、下载并安装Ollama三、运行DeepSeek-R1:8b大模型四、安装Open WebUI增强交互体验五、关闭Ollama开机自动启动六、DeepSeek大模型启停步骤 一、摘要及版本选择说明 1.1 摘要 作为一名对 AI 和生成…...

Python 调用 Stabilityai API在本地生成图像

Python 调用 Stabilityai API在本地生成图像 摘要功能 代码结构关键技术代码下载立即体验 摘要 本程序利用硅基流动目前的免费 stabilityai/stable-diffusion-2-1 模型API&#xff0c;生成图像并下载到本地&#xff0c;用户可以通过输入描述性提示词来获取相应的图像。使用Pyt…...

Python3中异常处理:try-finally语句的示例

一. 简介 前面一篇文章简单学习了 try-finally语句结构&#xff0c;执行过程、以及使用场景。文章如下&#xff1a; Python3中异常处理&#xff1a;try-finally语句-CSDN博客 本文写一些简单的示例来继续学习 try-finally语句的使用。 二. Python3中异常处理&#xff1a;try…...

Lua限流器的3种写法

学而不思则罔&#xff0c;思而不学则殆 引言 上篇文章讲解了Lua脚本&#xff0c;事务和Pipline之间的使用方式和性能差距&#xff0c;本篇文章将聚焦Lua脚本&#xff0c;我将用三种写法来展现如何实现一个Redis限流器 固定窗口限流 固定窗口限流也是最简单的限流算法&#x…...

特朗普政府发布《国家人工智能立法框架》,多维度布局AI领域

【《国家人工智能立法框架》六大核心目标锚定AI发展方向】特朗普政府发布的《国家人工智能立法框架》&#xff0c;意在通过统一国家政策确保美国在AI领域的全球领先地位。该框架包含六大核心目标&#xff0c;分别是保护儿童与赋能家长、维护与强化美国社区、尊重知识产权与支持…...

AD5144A数字电位器I²C驱动库深度解析与工程实践

1. AD5144A数字电位器驱动库深度解析&#xff1a;面向嵌入式工程师的IC控制实践指南AD5144A是ADI公司推出的四通道非易失性数字电位器&#xff0c;属于AD51xx系列中功能完备、应用灵活的代表型号。该器件通过IC接口实现对四个独立通道的精确电阻调节&#xff0c;支持256级&…...

电路设计与漫画艺术的跨界融合

1. 当电路遇见漫画&#xff1a;工程师的艺术表达在大多数人眼中&#xff0c;电路设计是冰冷的数据和复杂的公式&#xff0c;而漫画则是天马行空的创意表达。但作为一名从业十年的硬件工程师&#xff0c;我发现这两者其实有着惊人的相似之处——它们都需要严谨的结构设计&#x…...

快速原型构建遇阻?用快马AI一键绕过npm error 128,聚焦核心功能验证

最近在尝试用Node.js快速验证一个Web服务原型时&#xff0c;遇到了烦人的npm error code 128问题。这个错误通常和Git仓库权限相关&#xff0c;会直接卡住依赖安装流程。经过一番折腾&#xff0c;我总结出一套在InsCode(快马)平台快速绕开这个坑的实践方案&#xff0c;分享给同…...

救命!电路板维修高频故障排查口诀,背会秒上手,修板快准稳

修板半天没头绪&#xff1f;工控伺服板一修就慌&#xff1f;测遍元件还烧板&#xff1f;其实电路板故障排查不用死磕&#xff0c;一套好记的速记口诀&#xff0c;能帮你少走弯路、少赔成本&#xff0c;新手能快速上手&#xff0c;老手直接拉高效率&#xff0c;刷到这篇干货&…...

Agent设计模式学习(基于langchain4j实现)(6) - 组合复杂工作流

一、定义Agent 1.1 CandidateWorkflow 1 public interface CandidateWorkflow { 2 Agent("根据个人履历和职位描述生成主简历&#xff0c;通过反馈循环针对职位描述进行定制&#xff0c;直至达到合格分数") 3 String processCandidate(V("lifeStory&q…...

3大优化方案让经典游戏重获新生:WarcraftHelper解决老游戏新设备适配难题

3大优化方案让经典游戏重获新生&#xff1a;WarcraftHelper解决老游戏新设备适配难题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 当你在4K显示器上…...

3步搞定电脑风扇噪音!FanControl风扇控制软件完全指南,让你的电脑从此安静如新!

3步搞定电脑风扇噪音&#xff01;FanControl风扇控制软件完全指南&#xff0c;让你的电脑从此安静如新&#xff01; 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项…...

跨设备追番终极指南:3步配置Kazumi WebDAV数据同步

跨设备追番终极指南&#xff1a;3步配置Kazumi WebDAV数据同步 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP&#xff0c;支持流媒体在线观看&#xff0c;支持弹幕&#xff0c;支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi 还在为手…...

AI绘画模型训练完全指南:3大核心优势与零代码实践

AI绘画模型训练完全指南&#xff1a;3大核心优势与零代码实践 【免费下载链接】sd-trainer 项目地址: https://gitcode.com/gh_mirrors/sd/sd-trainer Stable Diffusion训练技术已成为AI绘画领域的核心能力&#xff0c;但传统训练流程复杂、配置繁琐&#xff0c;让许多…...