<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 {
public:
    int longestConsecutive(vector<int>& nums) {
    priority_queue<int, vector<int>, greater<int>> pq;
   for (auto it : nums) {
        pq.push(it);
    }

    if (pq.empty()) {
        return 0;
    }

    int cnt = 1;          // To track the current consecutive sequence length
    int maxi = 1;         // The maximum length of the consecutive sequence

    int el = pq.top();    // Initialize with the first element
    pq.pop();

    // Iterate over the priority queue
    while (!pq.empty()) {
        int a = pq.top();  // Get the next element
        pq.pop();
        
        if (a == el) {     
            // If it's a duplicate element, skip it
            continue;
        }
        else if (a == el + 1) {  
            // If it's consecutive, increment the count
            cnt++;
        } 
        else {
            // If it's not consecutive, reset count to 1
            cnt = 1;
        }

        // Update the maximum consecutive sequence length
        maxi = max(maxi, cnt);

        // Update `el` to the current element
        el = a;
    }
    return maxi;
    }
    
    
};
48215