diff --git a/NeetCodeRoadmap/Two_Pointers/128_Longest_Consecutive_Sequence.py b/NeetCodeRoadmap/Two_Pointers/128_Longest_Consecutive_Sequence.py index 13b7a89..7890316 100644 --- a/NeetCodeRoadmap/Two_Pointers/128_Longest_Consecutive_Sequence.py +++ b/NeetCodeRoadmap/Two_Pointers/128_Longest_Consecutive_Sequence.py @@ -3,33 +3,26 @@ def longestConsecutive(nums): :type nums: List[int] :rtype: int """ - # Handle edge-case - if len(nums) < 1: + # If list empty, return 0 + if not nums: return 0 - nums.sort() - sequence = [nums[0]] - answer = 0 - temp = None - print(nums) - for r in range(len(nums)): - # print(nums[r]) - # print(f'seq is {sequence} with len of {len(sequence)}') - if nums[r] == max(sequence)+1 and nums[r] not in sequence: - # print(f'hit {nums[r]}') - sequence.append(nums[r]) - elif nums[r] == max(sequence): - continue - else: - print(f'seq is {sequence} with len of {len(sequence)}') - if len(sequence) > answer: - answer = len(sequence) - # print('hit') - sequence.clear() - sequence.append(nums[r]) - if len(sequence) > answer: - return len(sequence) - else: - return answer + + # Create a set for O(n) search + num_set = set(nums) + longest_streak = 0 + + for num in num_set: + if num - 1 not in num_set: # Start of a potential streak + current_num = num + current_streak = 1 + + while current_num + 1 in num_set: # Continue the streak + current_num += 1 + current_streak += 1 + + longest_streak = max(longest_streak, current_streak) + + return longest_streak