题意:现在有一个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;
}
};