Skip to main content

41. First Missing Positive

尋找列表中不存在的最小正整數


樸素做法是

sort, loop

match 到不 match 就 return

但這是 O(nlog(n))


有個巧妙做法 O(n)

利用負數標記存不存在


先把所有負整數 = 0

loop nums

nums[abs(n) - 1] *= -1


反轉 abs(n) - 1 index 的元素去 negative

超出 len(nums) 無視


如果 nums[i] 負數

代表存在 i + 1

如果 nums[i] 正數

代表不存在 i + 1


另外考慮 0 不能被反轉為 negative

所以把數值設定為 - len(nums) - 1

去代表存在