8、Longest Consecutive Sequence(Hard)

Problem Description

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

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

Analyze

要求时间复杂度为O(n),无法使用排序,可以利用hash table。将序列中的所有元素存到一个set(集合)中。对于数组中任意一个元素A[i],我们可以通过set马上能知道A[i]+1和A[i]-1是否也在序列中。如果在,继续找A[i]+2和A[i]-2,以此类推,最后得到包含A[i]的连续序列,记录此序列的元素个数,最终返回最长连续序列的元素个数。为避免在遍历到A[i+1]时再次重复搜索该序列,在每次搜索的同时我们需要将搜索过的数从set中移除。

Code

class Solution {
    func longestConsecutive(nums: [Int]) -> Int {

        var set: Set<Int> = Set(nums)
        var maxLength = 0
        
        for num in nums {
            var length = 0
            var num_in = num
            
            while set.contains(num_in) {
                set.remove(num_in)
                length += 1
                num_in += 1
            }
            
            num_in = num - 1
            while set.contains(num_in) {
                set.remove(num_in)
                length += 1
                num_in -= 1
            }
            maxLength = max(maxLength, length)
        }
        
        return maxLength
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,792评论 0 33
  • 张爱玲 在青春的路口,曾经有那么一条小路若隐若现,召唤着我。 母亲拦住我:“那条路走不得."我不信。 "我就是从那...
    苏夏的后花园阅读 177评论 0 1
  • 对于绿色来说,请对自己要求的更高一点。 小绿人最大的问题就是顺其自然。高薪和升职对小绿人没有太大的吸引力,只要有一...
    承思而行阅读 198评论 0 0
  • 常常会在伸完懒腰后眼前一黑 脑袋发晕 然后后脑勺像点了火的枯草原 从后颈窜到涌泉穴的烧灼感
    percy0016阅读 233评论 1 0
  • 我嫉妒你的同事,你的朋友,你的室友,我甚至嫉妒你身边路过的路人甲。 一 “主要就是玩个情怀~” “屁吧,小心哪天把...
    曼喵喵阅读 909评论 0 2