首页 > 试题广场 >

缺失的第一个正整数

[编程题]缺失的第一个正整数
  • 热度指数:77277 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数

进阶: 空间复杂度 ,时间复杂度

数据范围:
-2^{31}\le nums[i] \le 2^{31}-1
0\le len(nums)\le5*10^5
示例1

输入

[1,0,2]

输出

3
示例2

输入

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

输出

2
示例3

输入

[4,5,6,8,9]

输出

1
头像 牛客题解官
发表于 2022-04-22 12:24:35
精华题解 题目主要信息: 题目给定一个无序整型数组,没有重复元素,可能有负数或零,需要找出其中没有出现的最小正整数 举一反三: 学习完本题的思路你可以解决如下题目: BM51. 数组中出现次数超过一半的数字 BM52. 数组中只出现一次的两个数字 方法一:哈希表(推荐使用) 知识点:哈希表 哈希表是一种根 展开全文
头像 不想看论文
发表于 2022-04-04 12:36:40
理想情况下每个元素都在自己的位置上,如下: 现在将元素对应位置打乱,并且缺失了一个元素,如下: 那么怎么找到这个缺失元素呢?我们可以依次遍历数组 nums ,每遍历到一个元素,比如 nums[i] ,就将 nums[i] 的值对应的位置做上标记,表示这个位置上的主人出现过,只是现在不在这个位置。 展开全文
头像 //returnasea
发表于 2021-10-06 21:00:31
nums的长度为n,所以缺失的第一个正整数要么在[1,n]中,要么是n+1。将nums中的负数修改为n+1,然后遍历nums数组,当碰到的元素<=n时,表示此元素在[1,n]中出现过,将它标记为负数。再次遍历nums碰到的第一个非负数的下标表示没有出现过,否则未出现的元素为n+1。 class 展开全文
头像 jxust18A
发表于 2021-11-02 21:55:33
主要思想就是,如果找最小未出现的正整数,必然在1~n+1中,所以对于所有a[i],如果a[i]在[1,n]中,那么就放到这个位置上去,否则大于n或者小于1的话,就不管它, O(n)复杂度 class Solution { public: /** * 代码中的类名、方法名、参数名已经 展开全文
头像 2019113916
发表于 2021-10-03 22:26:39
题意概述 给定一个无重复的整数数组 找出其中没有出现的最小正整数 方法一:哈希 思路与具体做法 首先遍历整个数组,并用unordered_map标记该数字已出现 然后从1遍历到n,并在unordered_map查找该值是否出现,未出现则直接返回 若长度为n的数组里n个数字都出现了,则第n+1个 展开全文
头像 空中转体一周半
发表于 2022-01-03 23:07:18
时间复杂度O(n),空间复杂度O(n)的做法:开辟一个新的数组arr,长度为nums.length+1,遍历nums数组,如果非负且值小于nums的长度,则把arr[nums[i]]置1。然后遍历辅助数组,找到下标不为1的第一个元素即可。 public class Solution { pu 展开全文
头像 牛客82035003号
发表于 2022-04-22 22:43:19
用一个标记数组来记录1到n-1之间的数是否出现过,遍历完做完标记之后再遍历一遍数组,找出第一个标记值未改变的即是没有出现过的, 一般情况就是原数组中出现了小于n的数和大于n的数,那么就把小于n的数在标记数组中改变标记值,大于等于n的数不管 特殊情况:对于数组中的数刚好是1到n-1每个数都 展开全文
头像 菜鸡孙连城
发表于 2022-03-23 10:24:15
确实的第一个整数要么是[1,n],要么是n+1 将nums数组中的所有元素加入set中, 遍历[1,n] 如果set中没有返回即可 最后返回n+1 function minNumberDisappeared( nums ) { //结果要么是1-n 要么是n+1 let set = new 展开全文
头像 总之就是非常可爱
发表于 2022-02-23 15:14:29
class Solution { public:     /**      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可      *      *  展开全文
头像 浪迹天涯笙箫丶
发表于 2022-02-09 20:18:31
public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ 展开全文
头像 fred-coder
发表于 2021-10-03 21:35:19
将数组排序,一次遍历,直到当前数字不相等或遍历完成,代码如下 # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param nums int整型一维数组 # @return int整型 # class Solution: def minNum 展开全文