leetcode41. 缺失的第一个正数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [7,8,9,11,12]
输出: 1
示例 3:
输入: [3,4,-1,1]
输出: 2
提示:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。
方法:使用数组实现哈希表
思路:
本题的最简单的方法就是将nums数组转换为哈希集合set,这样就消除了重复的元素,然后从1开始查询是否在集合中,找到第一个不存在的正整数,返回,即可。因为哈希表每次查询的时间复杂度为O(1),所以总的时间复杂度为O(N),但是使用了额外的集合,空间复杂度为O(N),不符合题目要求。
我们考虑使用原数组实现哈希表。我们将映射公式设为nums[i] = i+1。即下标为0,存放1;下标为1,存放2…
假设nums数组长度为n,那么最后的答案应该在[1,n+1]范围内,且只有当nums为存放的为1-n内的所有正整数时,答案才为n+1。