Leetcode Longest Consecutive Sequence,相算法主要依赖哈希表的快速查找功能,在使用unordered_set时,因为其内部使用hash表进行存储,因此查找速度相当快,因此算法复杂度可以炎o(n).
#include<iostream>
#include<vector>
#include<iostream>
#include<vector>
#include<unordered_set>
using namespace std;
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<long> nums_set;
for (auto c: nums) {
nums_set.insert((long)c);
}
long max_len = 0;
int cur_len = 0;
long before = 0;
long after = 0;
long tmp = 0;
for (auto ele: nums) {
tmp = ele;
if (nums_set.find(tmp) != nums_set.end()) {
cur_len = 1;
nums_set.erase(tmp);
before = tmp - 1;
after = tmp + 1;
while (true) {
if (nums_set.find(after) != nums_set.end()) {
nums_set.erase(after);
after++;
cur_len++;
} else {
break;
}
}
while (true) {
if (nums_set.find(before) != nums_set.end()) {
nums_set.erase(before);
before--;
cur_len++;
} else {
break;
}
}
max_len = cur_len > max_len? cur_len : max_len;
}
}
return max_len;
}
};
// Sample input: ./a.out num edge1a edg1b edge2a edge3b ...
int main(int argc, char * argv[]) {
Solution so;
vector<int> test;
for (int i = 1; i < argc; i ++) {
test.push_back(atoi(argv[i]));
}
int re = so.longestConsecutive(test);
cout<<"re: "<<re<<endl;
return 0;
}
Test Case:
input: ./a.out 2 3 4 6 5 7 10 11
output: re: 6