Longest Consecutive Sequence

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

思想: 用Set(HashSet)来确定每一个数相邻的序列。

java代码:

  1. public int longestConsecutive(int[] num) {
  2. Set<Integer> data = new HashSet<Integer>();
  3. int nlen = num.length;
  4. if(nlen == 0) return 0;
  5. for(int i=0;i<nlen;i++) {
  6. data.add(num[i]);
  7. }
  8. int longest = 0;
  9. for(int i=0;i<nlen;i++) {
  10. int step = 0;
  11. int start = num[i];
  12. while(data.contains(start)){
  13. data.remove(start);
  14. start++;
  15. step++;
  16. }
  17. start = num[i]; //还是上一个起点
  18. while(data.contains(start-1)){
  19. step++;
  20. start--;
  21. data.remove(start);
  22. }
  23. if(step>longest) {
  24. longest = step;
  25. }
  26. }
  27. return longest;
  28. }

C++代码:了解 unordered_set 和java中的HashMap一致

  1. int longestConsecutive(vector<int> &num) {
  2. if(num.empty()) return 0;
  3. int i=0;
  4. int sz = num.size();
  5. unordered_set<int> numset;
  6. for(i=0;i<sz;i++) {
  7. if(numset.count(num[i])==0)
  8. numset.insert(num[i]);
  9. }
  10. int maxlg = 0;
  11. for(i=0;i<sz;i++) {
  12. int lg = 1;
  13. if(numset.count(num[i])!=0) {
  14. int c=num[i]+1;
  15. while(numset.count(c)!=0) {
  16. lg++;
  17. numset.erase(c);
  18. c++;
  19. }
  20. c = num[i]-1;
  21. while(numset.count(c)!=0) {
  22. lg++;
  23. numset.erase(c);
  24. c--;
  25. }
  26. }
  27. if(lg>maxlg) maxlg = lg;
  28. }
  29. return maxlg;
  30. }
posted @ 2014-07-28 00:10  purejade  阅读(91)  评论(0编辑  收藏  举报