题意:在一串数组中,找出最长的连续序列(元素间的相对位置可以变化)
解法:这是一题变形的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;
}
};