Description

Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.

You must write an algorithm that runs in O(n) time.

Example 1:

  • Input: nums = [100,4,200,1,3,2]
  • Output: 4
  • Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.

Example 2:

  • Input: nums = [100,4,200,1,3,2]
  • Output: 4
  • Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.

Example 3:

  • Input: nums = [1,0,1,2]
  • Output: 3

Constraints:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

Submitted Code

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        nums_set = set(nums)                        # 해시셋으로 변경
        max_len = 0

        for n in nums_set:
            if n-1 not in nums_set:                 # 해당 숫자가 연속 수열의 처음인지 확인
                curr_len = 1
                while n+1 in nums_set:
                    curr_len += 1
                    n += 1
                max_len = max(curr_len, max_len)

        return max_len

Runtime: 39 ms | Beats 94.78%
Memory: 36.63 MB | Beats 37.05%

𝑂(𝑛)의 시간 내에 해결하려면 해시셋을 사용해야 한다.

Other Solutions

1st

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        numset = set(nums)
        longest = 0
        for n in numset:
            if n - 1 not in numset:
                length = 1
                while n + length in numset:
                    length += 1
                longest = max(longest, length)
        return longest

time complexity: 𝑂(𝑛)
space complexity: 𝑂(𝑛)

Leave a comment