对unordered_set和set的内部实现还不了解,只知道前者是hash实现的,后者是用R-B-Tree实现。有时间需要读下源码。
附上代码:
1 class Solution {
2 public:
3 int longestConsecutive(vector<int> &num) {
4 unordered_set<int> mynum(num.begin(), num.end());
5 // "max_len" holds the length of the longest consecutive sequence
6 int max_len(0);
7 // "N" is the length of "num"
8 unsigned int N(num.size());
9 // iterator every element of vector num
10 for (unsigned int i(0); i < N; i++) {
11 // "count" holds the maximum length of
12 // consecutive sequence that can be found
13 // by expanding from "num[i]" to the left and right
14 int count(0), tmp(num[i]);
15 while (mynum.find(tmp) != mynum.end()) {
16 // erase "tmp" from set
17 mynum.erase(tmp);
18 count++;
19 // since "INT_MAX + 1 = INT_MIN"
20 // we should not consider {INT_MAX-1, INT_MAX, INT_MIN} as consecutive sequence
21 if (tmp == INT_MAX) break;
22 tmp++;
23 }
24 tmp = nu