Skip to content

Commit da57f6b

Browse files
committed
find longest consecutive
1 parent b664c85 commit da57f6b

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

longest-consecutive-sequence/Geegong.java

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,46 @@
1+
import java.util.HashMap;
12
import java.util.HashSet;
2-
import java.util.Iterator;
3+
import java.util.Map;
34

5+
/**
6+
* time complexity : O(n)
7+
*/
48
public class Geegong {
59

610
public int longestConsecutive(int[] nums) {
7-
811
HashSet<Integer> setOfNums = new HashSet<>();
9-
int start = 0;
10-
int end = 0;
12+
// key : startIndex , value : length
13+
Map<Integer, Integer> lengthMap = new HashMap<>();
14+
15+
// sort..? 를 해야될까 싶음..
1116

1217
// initialize
1318
for (int num : nums) {
1419
setOfNums.add(num);
15-
start = Math.min(start, num);
16-
end = Math.max(end, num);
1720
}
1821

1922
Integer longest = 0;
20-
Integer current = 0;
21-
while (start <= end) {
2223

23-
iterate(setOfNums, start, current);
24-
longest = Math.max(longest, current);
24+
for (Integer num : setOfNums) {
25+
int length = iterate(setOfNums, num, 0, lengthMap);
26+
longest = Math.max(longest, length);
2527
}
28+
29+
return longest;
2630
}
2731

28-
public Integer iterate(HashSet<Integer> hashSet, Integer start, Integer currentLength) {
32+
public Integer iterate(HashSet<Integer> hashSet, int currIndex, int currLength, Map<Integer, Integer> lengthMap) {
33+
if (lengthMap.containsKey(currIndex)) {
34+
return lengthMap.get(currIndex);
35+
}
2936

30-
if (hashSet.contains(start)) {
31-
currentLength++;
32-
iterate(hashSet, start+1, currentLength);
37+
if (hashSet.contains(currIndex)) {
38+
currLength++;
39+
return iterate(hashSet, currIndex+1, currLength, lengthMap);
3340

3441
} else {
35-
// currentLength 를 리턴해야 하나..
36-
return start;
42+
lengthMap.put(currIndex, currLength);
43+
return currLength;
3744
}
3845

3946
}

0 commit comments

Comments
 (0)