43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
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]))
|