題意:在一串數組中,找出最長的連續序列(元素間的相對位置可以變化)
解法:這是一題變形的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;
}
};