first-missing-positiveV1.py (1061B)
1 # this might be the first hard problem I've done that i felt proud of solving myself. 2 3 4 class Solution: 5 def firstMissingPositive(self, nums: List[int]) -> int: 6 n = len(nums) 7 min_positive_num = -1 8 max_val = -1 9 10 for num in nums: 11 if (min_positive_num == -1 or num < min_positive_num) and num > 0: 12 min_positive_num = num 13 if num > max_val: 14 max_val = num 15 16 if min_positive_num > 1: 17 return 1 18 19 xor = 0b0000 20 21 for index, num in enumerate(nums): 22 if num > 0: 23 xor ^= num 24 else: 25 nums[index] = n + 1 26 27 for num in range(1, len(nums) + 1): 28 xor ^= num 29 30 if xor == 0 and max_val == len(nums): 31 return len(nums) + 1 32 33 for num in nums: 34 if abs(num) < len(nums): 35 nums[abs(num) - 1] = min(nums[abs(num) - 1], -nums[abs(num) - 1]) 36 37 for index, num in enumerate(nums): 38 if num > 0: 39 return index + 1