find the largest subset of consecutive integers 找到最大的连续整数子集

Find the largest subset of consecutive integers 找到最大的连续整数子集

Given an int array which might contain duplicates, find the largest subset of it which form a sequence. 
Eg. {1,6,10,4,7,9,5}
then ans is 4,5,6,7

一个简单的解法是:

  1. Sort the array
  2. Find the longest subset
  3. Remove duplicate numbers

但是, Can this be done in O(n) time ?

Approach:
A = {1,6,10,4,7,9,5}

For each number A[i], put A[i] in hashMap<Int, List>
Also check if (A[i]+1) and (A[i]-1) exists in the Map,
If hashMap.contains((A[i]+1)) is true then append A[i] to the hashMap.get((A[i]+1));
If hashMap.contains((A[i]-1)) is true then append A[i] to the hashMap.get((A[i]-1));
And Append hashMap.get(A[i]+1) and hashMap.get(A[i]-1) to hashMap.get(A[i]);

In the end the iterate through all the keys of the hashMap and the largest List of hashMap.get(A[i]) is the longest sequence that exists in the input array.

Input Array for the below code:
A = {2, 3, 9, 10, 11, 4, 13, 5, 15, 6, 17, 7};
Output:

subset which forms the longest consecutive sequence: 
2 3 4 5 6 7 

你可能感兴趣的:(find the largest subset of consecutive integers 找到最大的连续整数子集)