最长连续序列

220 阅读1分钟

leetcode-cn.com/problems/Wh…

题意:现在有一个vector数组nums,输出最长连续序列长度。
比如[100,4,200,3,2,1]有这样的数组,最长连续序列就是[1,2,3,4],这个序列长度为4,所以就输出4.

思路:把nums数组中的数存在unordered_map中.然后遍历整个nums数组,如果unordered_map中存在这个数,就向上找到边界,并把找到的每个数从unordered_map中删除掉,再向下找到边界,从unordered_map中删除找到的每个数,这样复杂度就是O(n).

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        if(nums.size() == 0) {
            return 0;
        }
        unordered_map<int,bool> mpArr;
        for(int i=0;i<nums.size();i++) {
            mpArr[nums[i]] = true;
        }
        
        int mxResult = 0;
        for(int i=0;i<nums.size();i++) {
            if(mpArr[nums[i]]) {
                int cntUp=1,cntDown=1;
                while(mpArr[nums[i]+cntUp]) {
                    mpArr[nums[i]+cntUp] = false;
                    ++cntUp;
                }
                while(mpArr[nums[i]-cntDown]) {
                    mpArr[nums[i]-cntDown] = false;
                    ++cntDown;
                }
                mpArr[nums[i]] = false;
                mxResult = max(mxResult,cntUp+cntDown-1);
            }
        }
        return mxResult;
    }
};