leetcode

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 2d3548496b062725d6b40ae2a1941a8c44d1213c
parent 53d63e9925bd3b762fedb4d5bda4489d8613fb4f
Author: Andrew Laack <andrew@laack.co>
Date:   Tue, 15 Jul 2025 17:55:17 -0500

Completed first missing positive

Diffstat:
Afirst-missing-positive/first-missing-positiveV1.py | 39+++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+), 0 deletions(-)

diff --git a/first-missing-positive/first-missing-positiveV1.py b/first-missing-positive/first-missing-positiveV1.py @@ -0,0 +1,39 @@ +# this might be the first hard problem I've done that i felt proud of solving myself. + + +class Solution: + def firstMissingPositive(self, nums: List[int]) -> int: + n = len(nums) + min_positive_num = -1 + max_val = -1 + + for num in nums: + if (min_positive_num == -1 or num < min_positive_num) and num > 0: + min_positive_num = num + if num > max_val: + max_val = num + + if min_positive_num > 1: + return 1 + + xor = 0b0000 + + for index, num in enumerate(nums): + if num > 0: + xor ^= num + else: + nums[index] = n + 1 + + for num in range(1, len(nums) + 1): + xor ^= num + + if xor == 0 and max_val == len(nums): + return len(nums) + 1 + + for num in nums: + if abs(num) < len(nums): + nums[abs(num) - 1] = min(nums[abs(num) - 1], -nums[abs(num) - 1]) + + for index, num in enumerate(nums): + if num > 0: + return index + 1