给定一个无序的整数类型数组,求最长的连续元素序列的长度。
eg:给出的数组为[100, 4, 200, 1, 3, 2], 最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4
需要给出时间复杂度在O(n)之内的算法.
方法:
借助额外空间哈希表,两次遍历。 思路:先用hash将原始数据缓存,以便于快速索引。
int findLongest(vector<int> vec) {
const int len = vec.size();
if (len < 1)
return 0;
if (len < 2)
return 1;
int maxLen = 0;
unordered_set<int> cache;
for (auto& it : vec) {
cache.insert(it);
}
for (auto& it : vec) {
unordered_set<int>::iterator ite1= cache.find(it);
if (cache.end() != ite1) {
cache.erase(ite1);
//删除左右相邻的元素
int rightVal = it + 1;
while (cache.end() != cache.find(rightVal)) {
cache.erase(cache.find(rightVal));
++rightVal;
}
int leftVal = it - 1;
while (cache.end() != cache.find(leftVal)) {
cache.erase(cache.find(leftVal));
--leftVal;
}
int currLen = rightVal - leftVal - 1;
if (maxLen < currLen) {
maxLen = currLen;
}
}
}
return maxLen;
}
int main() {
vector<int> vec = { 100, 4, 200, 1, 3, 2 };
int len = findLongest(vec);
return 1;
}