1.没有按照题中的时间复杂度要求写的一个能通过的代码。
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
nums.sort()
result = 1
for num in nums:
if num < result:
continue
if num == result:
result += 1
else:
break
return result
2.然后我看了题解。用数组本身做hash表是个很酷的事情。如果nums中全是正数,且某个数字num在nums中出现过的话,就把nums[num-1]这个位置的数值转化为负数,标记一下这个数字在数组中出现过。之后要做的就是把最小的大于0的数的位置+1就是最终答案了。不过这道题有几个注意事项:
- nums中会存在负数和大于len(nums)的数,大于长度的数在nums[num-1]操作中会越界。但是需要注意到的是,这两种情况的数对答案不会有影响,因为答案一定小于等于len(nums)+1,所以把这两种数全换为1就好了。
- 不能直接换为1,要在换之前判断整个nums中是否有1,如果没有1就直接返回1。昨晚这步判断之后,随便换就好了。
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
if 1 not in nums:
return 1
for i in range(len(nums)):
if nums[i] <= 0 or nums[i] > len(nums):
nums[i] = 1
for num in nums:
tmp = num
if num < 0:
tmp = -tmp
if nums[tmp-1] > 0:
nums[tmp-1] = -nums[tmp-1]
for i in range(len(nums)):
if nums[i] > 0:
return i+1
return len(nums)+1
这段时间失踪了是因为我去学托福了。7月20日开始上课,然后上了一个月,9月7日考试。英语太难了,还是敲代码适合我。学英语的时候心态真的一天一崩,听力和阅读怎么那么难?学了那么久,觉得自己的英语水平还是很垃圾。希望首考能上90吧(I have a dream)。加油啊。考完了之后就是有证的人了。敲代码真的能让我感觉到身心愉悦,感觉得到了救赎。不过明天还要继续学托福啊,不能放弃,因为,贵。By the way, Queer Eye 真的好看。