`
frank-liu
  • 浏览: 1682243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 in O(n) complexity.

原问题链接:https://leetcode.com/problems/longest-consecutive-sequence/

 

问题分析

  这个问题看起来确实有点难度,因为这个序列是没有排序的。如果我们需要去找它这里面元素能构成的最大序列,一种最简单的办法确实是对这个数组排序。但是一般来说,排序的时间复杂度就到了O(nlogn)了,而这里要求的时间复杂度为O(n)。所以上述的办法并不可行。

  既然上面方法不可行的话,我们就看看有没有别的办法。在数组里,我们可以将每个元素和它是否被访问过的标记放到一个Map<Integer, Boolean>里。这样所有的元素最开始对应的值都是false。而每次我们遍历元素数组的时候,就尝试从元素的两头分别递增和递减,如果递增或者递减后也有元素存在于map中,说明它们构成了一个连续的序列。在每次访问完一个元素之后,我们要将元素在map里对应的值设置为true,这样可以防止后面的元素再重复访问这个位置。我们就可以跳过一些不必要的比较。

  按照这个过程,我们整体的时间复杂度也可以降下来。详细的实现如下:

 

public class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums == null || nums.length == 0) return 0;
        int maxLen = 1;
        Map<Integer, Boolean> map = new HashMap<>();
        for(int i : nums) map.put(i, false);
        for(int i = 0; i < nums.length; i++) {
            int right = nums[i] + 1, n = nums[i], count = 0;
            while(map.containsKey(n) && !map.get(n)) {
                map.put(n, true);
                n--;
                count++;
            }
            while(map.containsKey(right) && !map.get(right)) {
                map.put(right, true);
                right++;
                count++;
            }
            maxLen = Math.max(maxLen, count);
        }
        return maxLen;
    }
}
1
8
分享到:
评论

相关推荐

    leetcode分类-Leetcode:Leetcode题解

    leetcode 分类 Leetcode代码题解 随缘刷题,选择性更新题解 LeetCode 94 144 145 ...longest-consecutive-sequence 最长连续序列: Leetcode 155 Min Stack 最小栈: LeetCode 773 滑动谜题: ......

    python-leetcode题解之128-Longest-Consecutive-Sequence

    python python_leetcode题解之128_Longest_Consecutive_Sequence

    js-leetcode题解之128-longest-consecutive-sequence.js

    javascript js_leetcode题解之128-longest-consecutive-sequence.js

    leetcode跳跃-leetcode:leetcode题解

    比如,“最长连续序列”(Longest Consecutive Sequence)要求找到给定无序整数数组中最长的连续序列长度,这涉及到哈希表和递归/迭代的巧妙结合。 LeetCode平台的开源特性意味着用户可以查看其他人的解决方案,...

    leetcode答案-leetcode:leetcode上的算法答案

    如“最长连续序列”(Longest Consecutive Sequence)问题,可以使用动态规划在O(n)时间复杂度内找到答案。 9. **分治策略**:将大问题分解为小问题,逐个解决后再合并结果。如“归并排序”(Merge Sort),通过...

    leetcode题库-leetcode:算法代码-JavaScript

    例如,"最长连续序列"(Longest Consecutive Sequence)题目的解决方案通常会用到哈希表来存储数组元素及其出现的次数,再结合深度优先搜索或广度优先搜索策略找出最长的连续序列。 3. 优化技巧:在解决LeetCode...

    leetcode:LeetCode练习

    5. **动态规划**:如“最长连续序列”(Longest Consecutive Sequence),要求找到一个无序整数数组中最长的连续子序列。 6. **回溯法**:如“全排列”(Permutations),要求列出所有可能的数组排列。 7. **堆和队列*...

    leetcode分类-leetcode:leetcode刷题

    4. **滑动窗口**:在数组中使用滑动窗口进行统计,如“最长连续序列”(Longest Consecutive Sequence)。 5. **数组分割**:根据特定条件将数组分割成多个子数组,如“分割数组的最大和”(MaxChunks ToSorted)。...

    lrucacheleetcode-LeetCode:这个库用于总结leetcode中遇到的习题,期望按照数据结构和常用方法分成2类,进行总结,

    Consecutive Sequence 7 Two Sum Hash,夹逼均可 8 3Sum Hash法转换2sum 9 3Sum Closest Sort +夹逼法 10 4Sum Sort +夹逼法 11 Remove Element 12 Next Permutation 公式 13 Permutation Sequence 公式 14 Valid ...

    lrucacheleetcode-leetcode:个人刷leetcode遇到的一些题汇总(golang)

    longest-consecutive-sequence max-area-of-island next-greater-element-ii serialize-and-deserialize-binary-tree subarray-sum-equals-k binary-tree-preorder-traversal n-queens-ii populating-next-right-...

    Leetcode:此回购包含Leetcode问题的解决方案

    此外,"Leetcode-main"可能还包含了其他挑战,如“最长连续序列”(Longest Consecutive Sequence)来演示如何使用集合进行有效的状态追踪,或者“最大子数组和”(Maximum Subarray)来展示动态规划的应用。每个问题的...

    leetcode添加元素使和等于-leetcode:leetcode

    Longest_Consecutive_Sequence 双向确认是否连续,避免重复的n^2复杂度 Palindrome_Partitioning DP,避免递归调用,利用数组储存已算出来的数值,由后向前逐渐增加字符串处理 Palindrome_Partitioning_2 同上 Sum_...

    LeetCode题解(java语言实现).pdf

    * Longest Consecutive Sequence Java:该题目要求找到最长的连续序列,实现方法使用了哈希表和迭代算法。 * Search a 2D Matrix:该题目要求在二维矩阵中查找元素,实现方法使用了二分查找算法。 * Rotate Image:...

    LeetCode最全代码

    # [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...

    leetcode中文版

    2. **2.1.6 Longest Consecutive Sequence**:给定一个未排序的整数数组,找出其中最长连续序列的长度。 3. **2.1.7 Two Sum**:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个...

    leetcode-java:leetcode在线判断的Java解决方案

    2. "最长连续序列"(Longest Consecutive Sequence):利用HashSet存储数值并更新最长连续序列长度。 这些案例展示了如何将数据结构和算法应用到实际问题中,帮助我们更好地理解和实践Java在LeetCode中的解题策略。...

    2018年最新Google Onsite面经总结1

    Binary Tree Longest Consecutive Sequence等。这类题目通常要求读者使用树的各种操作来解决问题,例如树的遍历、查找、插入等操作。 4. 图类题目 图类题目是LeetCode原题中的一个复杂类题目,本文中涵盖了多个图...

    leetcode卡-LeetCode-HashTable:此存储库包含HashTable探索卡中所有问题的解决方案

    5. **滑动窗口最大值/最小值**:例如“数组中的最长连续序列”(Longest Consecutive Sequence),哈希表可以帮助我们快速查询元素及其相邻元素的状态,从而找到最长连续序列。 6. **统计问题**:如“数组中出现...

    python-leetcode面试题解之第128题最长连续序列-题解.zip

    LeetCode的第128题,名为"Longest Consecutive Sequence",要求找到给定无序整数数组中,最长的连续整数序列的长度。例如,对于输入数组 [100, 4, 200, 1, 3, 2],最长连续序列是 [1, 2, 3, 4],其长度为4。 首先,...

Global site tag (gtag.js) - Google Analytics