【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.

解答;

O(n) 的时间复杂度看到,就猜到是不是用动态规划。然后想了很长时间找不到状态转移方程……

结果 Discuss 里面都是用容器来计算(O(n) 不一定是DP,也可以考虑容器)。因为这段序列可能是有重复元素的,所以使用 set 相关的容器可以避免容器中包含重复元素。

但是,set / map 是基于红黑树实现的,因此查找效率是 O(log n) 级别的;因此,可以使用基于 hashmap 的
unordered_set
容器,查找效率是常数级别

设定一个容器,保存已经访问过的元素。每个元素遍历它 ++ 以及 -- 部分。

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> visited;
        unordered_set<int> all(nums.begin(), nums.end());

        int max = 0;
        int count, tmp;
        int size = nums.size();
        for(int i=0; i<size; i++) {
            if (visited.find(nums[i]) != visited.end()) continue;

            visited.insert(nums[i]);
            count = 1;

            tmp = nums[i];
            while(all.find(tmp - 1) != all.end()) {
                count++;
                tmp--;
                visited.insert(tmp);
            }

            tmp = nums[i];
            while(all.find(tmp + 1) != all.end()) {
                count++;
                tmp++;
                visited.insert(tmp);
            }

            if (count > max) max = count;
        }
        return max;
    }
};

版权声明:本文为博主原创文章,转载请联系我的新浪微博 @iamironyoung

时间: 2024-08-26 08:32:49

【LeetCode从零单刷】Longest Consecutive Sequence的相关文章

LeetCode 549. Binary Tree Longest Consecutive Sequence II

Given a binary tree, you need to find the length of Longest Consecutive Path in Binary Tree. Especially, this path can be either increasing or decreasing. For example, [1,2,3,4] and [4,3,2,1] are both considered valid, but the path [1,2,4,3] is not v

LeetCode OJ - Longest Consecutive Sequence

这道题中要求时间复杂度为O(n),首先我们可以知道的是,如果先对数组排序再计算其最长连续序列的时间复杂度是O(nlogn),所以不能用排序的方法.我一开始想是不是应该用动态规划来解,发现其并不符合动态规划的特征.最后采用类似于LRU_Cache中出现的数据结构(集快速查询和顺序遍历两大优点于一身)来解决问题.具体来说其数据结构是HashMap<Integer,LNode>,key是数组中的元素,所有连续的元素可以通过LNode的next指针相连起来. 总体思路是,顺序遍历输入的数组元素,对每个

【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

leetcode --day12 Surrounded Regions &amp; Sum Root to Leaf Numbers &amp; Longest Consecutive Sequence

1.  Surrounded Regions Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured by flipping all 'O's into 'X's in that surrounded region. For example, X X X X X O O X X X O X X O X X After running your fu

[LeetCode] Longest Consecutive Sequence(DP)

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

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]Longest Consecutive Sequence @ Python

原题地址:https://oj.leetcode.com/problems/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 seque

【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

【LeetCode OJ】Longest Consecutive Sequence

Problem Link: http://oj.leetcode.com/problems/longest-consecutive-sequence/ This problem is a classical problem where we can reduce the running time by the help of hash table. By given a list of numbers, we can find the longest consecutive sequence b

[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