leetcode Longest Consecutive Sequence

Longest Consecutive Sequence

题目详情:

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

解题方法:

维护一个set,首先将vector中的所有元素插到set中。然后遍历vector中的所有元素,如果在set中能找到,则接着找比这个元素连续小的数,直到找不到为止,同时页找比这个元素连续大的数,直到找不到为止。这样这个与这个元素构成连续序列的大小就是最大的减最小的减一。在找到连续序列的最大值就好了。

代码详情:

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int result = 0;
        set<int> s;
        for (int i = 0; i < nums.size(); i++) {
            s.insert(nums[i]);
        }
        for (int i = 0; i < nums.size(); i++) {
            if (!s.count(nums[i])) continue;
            s.erase(nums[i]);
            int pre = nums[i]-1;
            int next = nums[i]+1;
            while (s.count(pre)) {
                s.erase(pre);
                pre--;
            }
             while (s.count(next)) {
                s.erase(next);
                next++;
            }
            result = max(result, next-pre-1);
        }
        return result;
    }
    
};


猜你喜欢

转载自blog.csdn.net/weixin_40085482/article/details/78883571