leetcode刷题笔记四十一 缺失的第一个正数
leetcode刷题笔记四十一 缺失的第一个正数
源地址:41. 缺失的第一个正数
问题描述:
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:输入: [3,4,-1,1]
输出: 2
示例 3:输入: [7,8,9,11,12]
输出: 1提示:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。
代码补充:
//本题难点主要是在O(n)时间复杂度上,O(1)的空间幅度上完成
//核心是将数组的索引与数建立关系,是nums(i) == i+1 [nums(nums(i)-1) != nums(i)]
//通过一次循环,将数组进行排序,并且位置满足条件要求
//对于不满足nums(i) == i+1的i,直接返回i+1
//遍历完未发现,返回length+1
object Solution {
def firstMissingPositive(nums:Array[Int]): Int = {
for(i <- 0 until nums.length){
while(1 <= nums(i) && nums(i) <= nums.length && nums(nums(i)-1) != nums(i)){
val temp = nums(i)
nums(i) = nums(nums(i)-1)
nums(temp-1) = temp
}
}
//println(nums.mkString(" "))
for(i <- 0 to nums.length-1){
//println("------------------")
//println(i)
//println(nums(i))
if(nums(i) != i+1) return i+1
}
return nums.length+1
}
}