力扣hot100——128. 最长连续序列

题目链接:128. 最长连续序列 - 力扣(LeetCode)
思路: 由于时间复杂度要求O(n),所以排除排序的可能,排序的时间复杂度是O(nlogn)。
考虑使用哈希表,哈希表将查询的时间降到O(1);并且进行剪枝操作,遍历元素是x,如果x-1也在哈希表中,那么x-1为起点的序列一定比x为起点的序列长,此时跳过此次循环,执行下一次循环。

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int>us(nums.begin(),nums.end());//将数组转成哈希表
        int res=0;
        for(int i:us){
            if(us.contains(i-1)){//i-1为起点的序列一定更长
                continue;
            }
            int j=i+1;
            while(us.contains(j)){//检查下一个数是否在集合中
                j++;
            }
            res=max(j-i,res);
        }
        return res;
    }
};
  • 时间复杂度:O(n),所有元素最多访问两次(一次作为起点,一次被序列包含),n代表元素个数
  • 空间复杂度:O(n)
posted @ 2025-04-15 13:39  林下清风~  阅读(45)  评论(0)    收藏  举报