知识点

哈希表

思路

原数组中存在的数放到数轴上的话,其实是一段一段的。我们要求的是最长段的长度。

我们可以把原数组放到哈希表中,逐个枚举每一段的开头元素,然后向后延伸,找到每一段的长度后更新答案。

由于原数组是一段一段的,所以我们最后的遍历次数其实是O(n)的,整体时间复杂度为O(n)

AC Code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param tag int整型vector 
     * @return int整型
     */
    int longestConsecutive(vector<int>& tag) {
        unordered_set<int> S(tag.begin(), tag.end());
        int res = 0;
        for (auto x : tag) {
            if (!S.count(x - 1)) {
                int cur = x;
                int len = 1;
                while (S.count(cur + 1)) {
                    cur += 1;
                    len += 1;
                }
                res = max(res, len);
            }
        }
        return res;
    }
};