leetCode_Longest Consecutive Sequence

題意:在一串數組中,找出最長的連續序列(元素間的相對位置可以變化)

解法:這是一題變形的DFS。先用map<int,int>把所有的數字(key)和是否出現(value)存起來,然後對於每一個元素,遞增找出出現的元素,再遞減找出出現的元素,每一次找到某個元素,讓它的key爲0既可。

代碼:

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        int i,j,k,t,size=nums.size(),ans=1,minVal,maxVal;
        map<int,int> dict;
        minVal=nums[0];
        maxVal=nums[0];
        for(i=0;i<size;i++)
        {
            if(nums[i]<minVal) minVal=nums[i];
            if(nums[i]>maxVal) maxVal=nums[i];
            dict[nums[i]]++;
        }
        for(i=0;i<size;i++)
        {
            j=0;
            k=nums[i]+1;
            t=nums[i]-1;
            if(dict[nums[i]]>0)
            {
                dict[nums[i]]=0;
                j++;
                while(dict[k]>0)
                {
                    dict[k]=0;
                    j++;
                    k++;
                }
                while(dict[t]>0)
                {
                    dict[t]=0;
                    t--;
                    j++;
                }
            }
            ans=max(ans,j);
        }
        return ans;
    }
};


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