Leetcode#128 Longest Consecutive Sequence

原题地址

 

1. 把所有元素都塞到集合里
2. 遍历所有元素,对于每个元素,如果集合里没有,就算了,如果有的话,就向左向右拓展,找到最长的连续范围,同时在每次找的时候都把找到的删掉。这样做保证了同样的连续序列只会被遍历一次,从而保证时间复杂度。

时间复杂度O(n)

代码:

 1 int longestConsecutive(vector<int> &num) {

 2   set<int> record;

 3   int maxLength = 0;

 4 

 5   for (auto n : num)

 6     record.insert(n);

 7 

 8   while (!record.empty()) {

 9     int len = 1;

10     int n = *(record.begin());

11     record.erase(n);

12     for (int i = n - 1; record.find(i) != record.end(); i--) {

13       len++;

14       record.erase(i);

15     }

16     for (int i = n + 1; record.find(i) != record.end(); i++) {

17       len++;

18       record.erase(i);

19     }

20     maxLength = max(maxLength, len);

21   }

22 

23   return maxLength;

 

你可能感兴趣的:(LeetCode)