刷力扣热题–第二十五天:41.缺失的第一个正数
新手第二十五天 奋战敲代码,持之以恒,见证成长
1.题目简介
2.题目解答
做这道题有点投机取巧的感觉,要求时间复杂度O(N),且空间复杂度O(1),那么就是尽可能的去找到更多的可能性,来减少循环次数。首先想的就是将数组的重复值进行挑选,之后根据最大值最小值进行判断,如果最小值大于1或者最大值小于1,那么直接返回1,如果在剔除重复值后就数组长度等于最大值与最小值差加一,那么直接返回最大值加1.这些情况如果都不符合,那么只能从1开始遍历,查看每个数是否在该数组内了。
实现了,结果还不错,看了下官方解答,并试着提交了一下,
解法感觉思想类似,这道题抓住‘对于一个长度为 N 的数组,其中没有出现的最小正整数只能在 [1,N+1]’ 这句话,去想怎么解决感觉会快很多~
3.心得体会
class Solution(object):
def firstMissingPositive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums = set(nums)
max_num = max(nums)
min_num = min(nums)
if min_num > 1 or max_num < 0:
return 1
if len(nums) == max_num - min_num + 1:
return max_num + 1
i = 1
while True:
if i not in nums:
return i
if i == max_num:
return max_num + 1
i += 1
4.做题时长
8月3日 16:30- 16:47 虽然是困难题,但数组相对来说还是比较简单~之后再多刷下算法题涨涨见识吧!