Leetcode-41.缺失的第一个正数
题目描述
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
说明:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。
解法1:桶排序
思路:
1.”一个萝卜1个坑“,即以自身作为hash表,将自身放入对应位置,例如nums[3]=2,那么就让他放入自身的第2个位置,即swap(nums[nums[3]-1],nums[3]),然后对交换过来的元素进行操作
2.如果该数的范围<=0||>n则自身没有地方放该数,那么就让该数在原地,不对他进行操作
3.如果要换的位置已经放入了正确的数,则跳出循环,对下一个nums[i]进行操作
4.遍历自身数组,当nums[i]!=i-1时,即该位置缺少对应的数,则找到了最小的缺失正数,返回,若遍历发现没有缺失,表示该数组从1到n,都有数字,则返回n+1
1 | class Solution { |