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
一个简单的解法是:
- Sort the array
- Find the longest subset
- 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