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

41. 缺失的第一个正数(LeetCode 热题 100)

题目来源:

41. 缺失的第一个正数 - 力扣(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 没有出现。


思路分析:来源:41. 缺失的第一个正数 - 力扣(LeetCode)

鸽笼:

先加个数组代表鸽笼,原数组的值代表鸽子号,原数组值放到对应笼子,从笼子遍历,得到缺少的正整数,再分情况讨论,缺少的要么是1,要么是n+1 ,以及其中. 1以及其中的不需要考虑因为位于鸽笼里面,n+1特殊处理


代码实现:

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n=nums.size();
        vector<int> aaa(nums.size()+1);
        for(auto i:nums)
            if(n>=i&&i>0)
             aaa[i]++;

        for(int i=1;i<=n;i++)
            if(aaa[i]==0)
            return i;
  return n+1;
}
};

题目心得:

  1. 很棒的一个思想,要积累一下。
  2. 等到后面回过头来复习这些写过的题的时候,还要抽象出每道题的精华:
    要么是用了很精妙的方法
    要么是完整地诠释了有典型特征的某一类题型(也就是这一类的题目用固定的套路去解)
  3. 有些函数/算法模板,不同的人用不同的实现方法,要积累出自己的,考试的时候又快又准的写出来

相关文章:

  • Linux高并发服务器开发 第十九天(线程 进程)
  • LeetCode热题100——滑动窗口/子串
  • dify安装
  • Linux中POSIX应用场景
  • 第4章 4.1 Entity Framework Core概述
  • 基于Java+Springboot+MySQL图书馆图书管理系统设计与实现
  • 力扣-回溯-39 组合总和
  • Python图像处理中的内存泄漏问题:原因、检测与解决方案
  • C#基础:使用Linq进行简单去重处理(DinstinctBy/反射)
  • Ubuntu 22.04 一键部署MinerU1.1.0
  • 计算机基础之操作系统——并发
  • PLSQL连接Oracle 19c报错ORA-28040
  • C语言(四)——数组
  • Redis(高阶篇)05章——案例落地实战bitmap/hyperloglog/GEO
  • 在 Windows 环境下部署 WebIssues:完整指南
  • leetcode21.合并两个有序链表
  • Python常见面试题的详解15
  • stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)
  • SOME/IP--协议英文原文讲解10
  • 阿里云如何协助解决操作系统兼容性问题
  • 沈阳做企业网站的公司/2023年6月份疫情严重吗
  • 多语言网站怎么实现的/seo优化快速排名
  • 河北 政府网站建设管理/给公司做网站要多少钱
  • 新买的服务器怎么做网站/seo基础培训机构
  • 网站首页html代码/抖音seo怎么收费
  • 无限动力网站/面点培训学校哪里有