面试grab遇到的问题,当时用最笨的方法去解决的,但是跟面试官的沟通中,对于最大值的输出理解有diff,导致面试官以为我对这一题都理解错误,不知道后续如何,先把结果写在这。
第一种思路,需要o(n)的空间复杂度,新申请一个空间new,根据每一个元素的值,对new进行赋值,赋值规则是:对于nums中在1-lens(nums)范围内,new数组中的元素值比下标大1
func firstMissingPositive(nums []int) int {
//
new := make([]int, len(nums))
for i:=0;i<len(nums);i++{
if nums[i] - 1 >=0 && nums[i]-1 < len(nums){
new[nums[i]-1] = nums[i]
}
}
for i:=0;i<len(nums);i++{
if new[i] != i+1{
return i+1
}
}
return len(nums)+1
}
对于更简单的算法,我本来以为这个博文里的算法是通的,但是我在做两道题都失败了,因为这个一轮交换后不能保证所有的数组都是符合预期的,所以单独这个算法是不行的,暂时没有其它的想法,先这样解吧