GoLang刷题之leetcode

题目41:缺失的第一个正数

题目描述:

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

题解:

func firstMissingPositive(nums []int) int {
    //为满足时间复杂度要求,利用nums数组做hash数组
    //将1放在下标为0,将2放在下标为1,将3放在下标为2....再从头遍历哪个下标对应的值≠下标+1
    //结果取值范围为[1,l+1]
    l := len(nums)
    for i:=0;i<l;i++{
        for nums[i]>=1 && nums[i]<=l && nums[i]!=nums[nums[i]-1]{
            nums[i], nums[nums[i]-1] = nums[nums[i]-1],nums[i]
        }
    }
    for i:=0;i<l;i++{
        if nums[i]!=i+1{
            return i+1
        }
    }
    return l+1
}

你可能感兴趣的:(leetcode,算法,数据结构)