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

news/2024/9/19 13:57:47 标签: 算法, 数据结构, leetcode, 哈希, 交换

给你一个未排序的整数数组 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.niftyadmin.cn/n/5665646.html

相关文章

通往AGI的皇冠:逻辑推理能力

文章来自新浪微博机器学习团队 AI Lab 负责人张俊林&#xff0c;OpenAI发布新模型o1之后的一些观点&#xff0c;很有启发&#xff1a; GPT 4o本质上是要探索不同模态相互融合的大一统模型应该怎么做的问题&#xff0c;对于提升大模型的智力水平估计帮助不大&#xff1b;而o1本…

Vue3.0组合式API:使用defineEmits()实现子组件向父组件传递数据

1、使用 defineEmits() 函数 父组件通过使用 Prop 为子组件传递数据&#xff0c;但如果子组件要把数据传递回去&#xff0c;就需要使用自定义事件来实现。父组件可以通过 v-on 指令&#xff08;简写形式“”&#xff09;监听子组件实例的自定义事件&#xff0c;而子组件可以通…

线程池的状态

线程池的状态分为&#xff1a;Running(运行状态)、Shutdown(关闭状态)、Stop(停止状态)、Tidying(整理状态)、Terminated(终止状态)。 Running(运行状态)&#xff1a;线程池被创建时&#xff0c;就是Running状态&#xff0c;线程池中的任务数位0。 该状态会接受新任务&#xf…

Docker指令学习1

docker指令 查看镜像列表&#xff1a; docker images | docker image ls 删除单个镜像: docker rmi <image_name>: 强制删除镜像&#xff1a; docker rmi -f <image_id> 如果镜像正在被某些容器使用&#xff0c;普通删除命令会失败。使用 -f 选项强制删除镜像 注意…

手语识别系统源码分享

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

数据结构-3.链表

前言 本篇博客给大家带来的是链表的知识点, 其中包括面试经常会提问的真题 ArrayList 和 LinkedList 的区别 . 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条, 如果分享不成功, 那我就会回你一下,那样你就分享成…

javascript-装饰器

装饰器 装饰者模式&#xff1a;能够在不改变对象自身基础上&#xff0c;在程序运行期间给对象添加职责 装饰器只能针对类和类的属性&#xff0c;不能直接作用于函数&#xff08;由于存在函数提升&#xff09; 本质上是语法糖&#xff0c;借助 Object.defineProperty(target,na…

WEB 编程:使用富文本编辑器 Quill 配合 WebBroker 后端

使用 Delphi 的 WebBroker 框架写 Web Server&#xff0c;需要一个前端的富文本编辑器。 评估了好几个&#xff0c;最后选择 Quill 这个开源的。 官方地址&#xff1a;Quill - Your powerful rich text editor 把前端代码&#xff0c;存储为一个单独的文本文件&#xff0c;方…