zoukankan      html  css  js  c++  java
  • 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
        }
    }
    
  • 相关阅读:
    链表的头指针
    顺时针打印矩阵
    旋转数组的最小数字
    实现string类
    最长对称子串
    DFS和BFS
    最长公共子序列
    排序算法
    大端与小端
    交换两个数
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13511207.html
Copyright © 2011-2022 走看看