128. Longest Consecutive Sequence

Medium

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 = [0,3,7,2,5,8,4,6,0,1]
Output:
 9

Constraints:

  • 0 <= nums.length <= 105

  • -109 <= nums[i] <= 109

解題

Runtime: 138 ms, faster than 75.35%

Memory Usage: 11.1 MB, less than 45.37%

func longestConsecutive(nums []int) int {
    if len(nums) == 0 { return 0 }
    
    m := make(map[int]bool) // 紀錄存在於 nums 內的數字
    
    for _, num := range nums {
        m[num] = true
    } 
    
    ans := 1
    
    for num := range m {
        if _, ok := m[num-1]; !ok {    // 是連續數列中最小的才開始找
            currLength := 1            // 目前的長度
            currNum := num             // 下一個要找的數字
            
            for {
                if _, ok := m[currNum+1]; ok {       // 找到了,長度+1、找下一個
                    currNum++
                    currLength++
                } else {
                    break
                }
            }
            
            if currLength > ans { ans = currLength }
        }
    }
  
    return ans
}

Last updated