128. Longest Consecutive Sequence(第十六周)

来源:互联网 发布:时尚芭莎 知乎 编辑:程序博客网 时间:2024/06/05 12:37

分析:

这道题是要求出最长的整数连续串。把这些数字看成图的顶点,而边就是他相邻的数字,然 后进行深度优先搜索。通俗一点说就是先把数字放到一个集合中,拿到一个数字,就往其两边搜索,得到包含这个数字的最长串,并且把用过的数字从集合中移除 (因为连续的关系,一个数字不会出现在两个串中)。最后比较当前串是不是比当前最大串要长,是则更新。如此继续直到集合为空。

代码如下:

class Solution {

public:
    int longestConsecutive(vector<int> &num) {
        /* https://oj.leetcode.com/problems/longest-consecutive-sequence/
        */
         
        int result = 0;
        unordered_set<int> unused(num.begin(), num.end());
        for (int i = 0; i < num.size(); i++) {
            if (unused.find(num[i]) == unused.end()) continue;
            int len = 1;
            unused.erase(num[i]);
             
            int left = num[i] - 1;
            while (unused.find(left) != unused.end()) {
                len++;
                unused.erase(left--);
            }
             
            int right = num[i] + 1;
            while (unused.find(right) != unused.end()) {
                len++;
                unused.erase(right++);
            }
             
            if (len > result) result = len;
        }
         
        return result;
    }
};