最长连续序列

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

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

示例:

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

解析:可以把这道题想象成最大岛屿面积的那道题,就是求最大的连在一起的1、先把所有的数字都放进set中2、这个时候遍历数组,随便找到一个数字n,就在set中判断n-1在不在里面,再判断n-2 一直向左延伸,只要有就把这个数字去掉(最大岛屿那道题,遍历过的岛屿都要置为0),同理向右延伸那么当前n所能延伸到的最大长度为   左延伸 + 右延伸 + 13、在遍历数组的过程中,一直更新最大值即可
class Solution {
    public int longestConsecutive(int[] nums) {
        HashSet<Integer> set = new HashSet<>();
        int len = nums.length;
        int res = 0;
        for (int i = 0; i < len; i++) {
            set.add(nums[i]);
        }
        for (int i = 0; i < len; i++) {
            int left = 0;
            int right = 0;
            int from = nums[i];
            while (set.remove(--from)) {
                left++;
            }
            from = nums[i];
            while (set.remove(++from)) {
                right++;
            }
            res = Math.max(res, left + right + 1);
        }
        return res;
    }
}

原文地址:https://www.cnblogs.com/tobemaster/p/12404984.html

时间: 2024-10-29 17:23:32

最长连续序列的相关文章

[LeetCode] Longest Consecutive Sequence 求最长连续序列

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 i

[LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

Given a binary tree, find the length of the longest consecutive sequence path. The path refers to any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The longest consecutive path need to be from p

GEEK编程练习— —最长连续序列

题目 给定一个无序的整数数组,返回最长连续序列的长度.要求时间复杂度为O(n). 输入 [100, 4, 200, 1, 3, 2, 0, -1] 输出 6 分析 因为要求时间负责度为O(n),所以不能先排序再查找.所以想到查询最快的hash表,记录每个元素是否使用,对每个元素,往左右扩张,直到不连续为止. 代码 #include <iostream> #include <unordered_map> #include <algorithm> using namespa

128. 最长连续序列

给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. class Solution(object): def longestConsecutive(self, num): """ :type nums: List[int] :rtype: int """ if num is

LeetCode 128. 最长连续序列(Longest Consecutive Sequence)

题目描述 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 解题思路 利用并查集的思想,构造一个map记录数组中以每个数所在的最长连续序列长度.每次遍历到一个数时,首先检查map中是否存在该数,若存在直接跳过,否则作如下更新操作: 找到左右相邻数字是否在map中,若存在则分别记录他们所在的最长连续序列长度,并更新当前的

【LeetCode】128. 最长连续序列

题目 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为O(n). 示例: 输入:[100, 4, 200, 1, 3, 2] 输出:4 解释:最长连续序列是[1, 2, 3, 4].它的长度为4 思路 思路一 先由小到大进行排序 考虑三种情况: 前后相差1,则是连续序列 前后相等,循环continue 最后一个元素,break 代码 def longestConsecutive(nums) -> int: ????if nums: ????????nums.sort()

[LeetCode] 128. 最长连续序列

题目链接 : https://leetcode-cn.com/problems/longest-consecutive-sequence/ 题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 思路: 这道题, 难在时间复杂度限定在\(O(n)\), 要不排序就可以了! 思路一:集合 集合,查询时间复杂度为\(

Leetcode 最长连续序列

题目链接:https://leetcode-cn.com/problems/longest-consecutive-sequence/ 题目大意: 略. 分析: 注意有重复值,序列为空等情况. 代码如下: 1 class Solution { 2 public: 3 int longestConsecutive(vector<int>& nums) { 4 unordered_map< int, int > m1; // 存以 key 为首的最长连续序列的长度 5 unor

LeetCode--128--最长连续序列(python)

给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 暴力超时... class Solution: def longestConsecutive(self, nums: List[int]) -> int: longestSequence = 0 for num in nums: curNum = num streak =

图解leetcode —— 128. 最长连续序列

前言: 每道题附带动态示意图,提供java.python两种语言答案,力求提供leetcode最优解. 描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 思路: 首先,我们先来看一个简单的例子:序列123 序列 56,插入4,求连续序列长度. 很容易得出结论,答案是6,那么这个6是怎么来的呢?6 = len(1,2