[leetcode] 128. Longest Consecutive Sequence

Longest Consecutive Sequence

Given an unsorted array of integers, find the lengt

h of the longest consecutive elements sequence.
Your algorithm should run in O(n) complexity.

Example:

Input: [100, 4, 200, 1, 3, 2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.

解法

使用hash表,便利所有數字,如果不在map中,查看左右相鄰的數字是否在hash表中,並分別記錄相鄰的數字的映射值;得到一個left+right+1表示當前值的映射值,並更新num-left和num-right的映射值。

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int res = 0;
        unordered_map<int, int> m;
        for (int num : nums) {
            if (m.count(num)) continue;
            int left = m.count(num - 1) ? m[num - 1] : 0;
            int right = m.count(num + 1) ? m[num + 1] : 0;
            int sum = left + right + 1;
            m[num] = sum;
            res = max(res, sum);
            m[num - left] = sum;
            m[num + right] = sum;
        }
        return res;
    }
};

參考

https://www.cnblogs.com/grandyang/p/4276225.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章