【LeetCode 128. 】Longest Consecutive Sequence

题目大意:

给出一个数组,求里面的数字能组成的最长连续序列的长度。
要求在 O (n) 时间内。

思路:

  1. 哈希表,遍历数组中的数字 num, 根据 num-1和 num+1的长度来更新。
  2. 枚举数组中的数字num, 当num-1不在数组中时,num是一个序列的起始,查找。

代码:

代码1:

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_map<int, int> mp;
        int ans = 0;
        for (auto num : nums) {
            if (mp.count(num)) continue;
            auto iterl = mp.find(num-1);
            auto iterr = mp.find(num+1);
            int l = iterl != mp.end() ? iterl->second : 0;
            int r = iterr != mp.end() ? iterr->second : 0;
            int t = l + r + 1;
            mp[num] = mp[num-l] = mp[num+r] = t;
            ans = max(ans, t);
        }
        return ans;
    }
};

代码2:

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<long long> st(nums.begin(), nums.end());
        int ans = 0;
        for (auto num : st) {
            if (st.count(num-1)) continue;
            int l = 0;
            while(st.count(num++)) l++;
            ans = max(ans, l);
        }
        return ans;
    }
};

逻辑思维有待加强啊。

猜你喜欢

转载自blog.csdn.net/iCode_girl/article/details/94650677