leetcode刷题笔记一百二十八题 最长连续序列

leetcode刷题笔记一百二十八题 最长连续序列

源地址:128. 最长连续序列

问题描述:

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)。

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

//本题主要使用Hash的结构特性缩短查找时间
//整个查找过程基于currentNum-1是否存在,如果存在则跳过因为在找到currentNum-1时会进行处理
//否则 currentNum应该为一串序列的首个数字,继续查找后续的数字是否存在
//直到整个序列查完即可
import scala.collection.mutable
object Solution {
    def longestConsecutive(nums: Array[Int]): Int = {
        val HSet = mutable.HashSet[Int]()
        var longestStreak = 0
        
        for (num <- nums) HSet.add(num)
        
        for (num <- HSet){
            if (HSet.contains(num-1) == false){
                var currentNum = num
                var currentStreak = 1
                while (HSet.contains(currentNum+1) == true){
                    currentNum += 1
                    currentStreak += 1
                }
                longestStreak = Math.max(longestStreak, currentStreak) 
            }
        }
        return longestStreak
    }
}
原文地址:https://www.cnblogs.com/ganshuoos/p/13511207.html