import sys class Solution: def __init__(self): self.number_set: set[int] = set() # 哈希表,全 O(1) self.longest_length: int = 1 def longestConsecutive(self, nums: list[int]) -> int: if not nums: return 0 self.number_set = set(nums) # O(n) for n in self.number_set: # n = self.number_set.pop() # print(n, file=sys.stderr) current_length: int = 1 if n + 1 in self.number_set: continue # pointer = n # while True: # if pointer + 1 in self.number_set: # pointer += 1 # current_length += 1 # self.number_set.remove(pointer) # else: # break pointer = n while True: if pointer - 1 in self.number_set: pointer -= 1 current_length += 1 # self.number_set.remove(pointer) else: break self.longest_length = max(current_length, self.longest_length) return self.longest_length if __name__ == '__main__': sol = Solution() print(sol.longestConsecutive([100, 4, 200, 1, 3, 2])) print(sol.longestConsecutive([0, 3, 7, 2, 5, 8, 4, 6, 0, 1]))