LeetCode41. 缺失的第一个正数(2024秋季每日一题 20)

server/2024/9/23 17:40:44/

给你一个未排序的整数数组 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 没有出现。

提示:

1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
− 2 31 < = n u m s [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1 231<=nums[i]<=2311


思路:

    1. 可以考虑 哈希表 记录已经存在的正整数,然后从 1 1 1 开始爆搜,搜到 答案
    • 时间复杂度: O ( N ) O(N) O(N),空间复杂度: O ( N ) O(N) O(N)
    1. 可以考虑先排序,再扫描,找出答案
    • 时间复杂度: O ( N l o g N ) O(NlogN) O(NlogN),空间复杂度: O ( 1 ) O(1) O(1)
    1. 通过交换法,将每个正整数元素,换到它对应的下标位置,然后重新扫描得出 答案
    • 时间复杂度: O ( N ) O(N) O(N),空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n = nums.size();for(int i = 0; i < n; i++){while(nums[i] != i + 1){if(nums[i] <= 0 || nums[i] > n || nums[i] == nums[nums[i]-1])break;swap(nums[i], nums[nums[i]-1]);}}for(int i = 0; i < n; i++){if(nums[i] != i + 1){return i + 1;}}return n + 1;}
};

http://www.ppmy.cn/server/120895.html

相关文章

spring springboot 日志框架

一、常见的日志框架 JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.... 注意&#xff1a;SLF4j 类似于接口 Log4j &#xff0c;Logback 都是出自同一作者之手 JUL 为apache 公司产品 Spring&#xff08;commons-logging&#xff09;、Hibernate&#xff08;jboss…

C++单例模式代码实现与分析

目录 1 代码 2 代码剖析 2.1 构造函数私有化 2.2 只能执行一次的代码 2.3 静态成员变量 2.4 智能指针 1 代码 下面的代码是https://github.com/Cambricon/CNStream 中的&#xff0c; /************************************************************************** Cop…

使用Redis实现用户关注博客的推模式

目录 一、思路 二、实现代码&#xff1a; 一、思路 发布者&#xff1a; 这里采用redis的zset结构&#xff0c;将键设置为被推送用户id&#xff0c;值设置为博客id&#xff0c;score设置为时间戳 推送之前先查到当前发布博客用户的粉丝有哪些&#xff0c;然后去循环挨个推送…

如何将 java.nio.ByteBuffer 转为 String

如何将 java.nio.ByteBuffer 转为 String 方法1: newString()方法结合ByteBuffer的array()方法, 忽略是否flip()过 用String的 public String(byte[] bytes, int offset, int length, Charset charset)方法 和 ByteBuffer的array()方法 长度在取 bbf.position()0?bbf.limit(…

银河麒麟桌面操作系统V10(SP1)离线升级SSH(OpenSSH)服务

目录 前言 准备工作 准备与目标服务器相同版本的操作系统 准备编译依赖包 下载OpenSSL源码包 下载OpenSSH源码包 升级OpenSSH服务 查看当前版本信息 安装编译依赖包 安装OpenSSL 安装OpenSSH 前言 OpenSSH是一个广泛使用的开源SSH(安全壳)协议的实现,它提供了安…

Android对象池的深入理解和使用

参考文献&#xff1a;https://www.jianshu.com/p/eb04e4e1869d 判断对象是否可以被回收 垃圾收集算法 内存分配与回收策略

安卓13长按电源按键直接关机 andriod13不显示关机对话框直接关机

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 有些设备需要在长按电源键的时候,直接关机。不需要弹出对话框进行询问。 2.问题分析 过滤电源按键,需要在系统里面处理的话,那么我们需要熟悉android的事件分发,然后再…

ARM概念

一.CPU CPU&#xff1a;计算机的核心部件&#xff0c;负责执行指令和处理数据。它可以被视为计算机的“大脑”&#xff0c;负责运算、控制和数据传输等任务。 SoC&#xff08;系统级芯片&#xff09;是将多个组件集成在一个芯片上的设计&#xff0c;通常包括CPU、GPU、内存、…