<p>Given an unsorted array of integers <code>nums</code>, return <em>the length of the longest consecutive elements sequence.</em></p>

<p>You must write an algorithm that runs in&nbsp;<code>O(n)</code>&nbsp;time.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [100,4,200,1,3,2]
<strong>Output:</strong> 4
<strong>Explanation:</strong> The longest consecutive elements sequence is <code>[1, 2, 3, 4]</code>. Therefore its length is 4.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [0,3,7,2,5,8,4,6,0,1]
<strong>Output:</strong> 9
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>0 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
	<li><code>-10<sup>9</sup> &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        nums = list(set(nums))

        starts = {}
        ends = {}

        for num in nums:
            # print(num)
            if num+1 not in starts and num-1 not in ends:
                # print(1)
                starts[num] = num
                ends[num] = num
            elif num+1 in starts and num-1 not in ends:
                # print(2)
                starts[num] = starts[num+1]
                ends[starts[num]] = num
                del starts[num+1]
            elif num+1 not in starts and num-1 in ends:
                # print(3)
                ends[num] = ends[num-1]
                starts[ends[num]] = num
                del ends[num-1]
            else:
                # print(4)
                starts[ends[num-1]] = starts[num+1]
                ends[starts[num+1]] = ends[num-1]
                del starts[num+1]
                del ends[num-1]
            # print(starts)
            # print(ends)

            
        max_len = 0
        for start, end in starts.items():
            if abs(end-start)+1 > max_len:
                max_len = abs(end-start)+1

        return max_len
    
34630