Skip to content

Commit e48bda1

Browse files
committed
solve : DaleStudy#240 (Longest Consecutive Sequence) with Java
1 parent f9c216c commit e48bda1

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/**
2+
* Constraints:
3+
* - 0 <= nums.length <= 105
4+
* - -109 <= nums[i] <= 109
5+
*
6+
* Output
7+
* - 가장 긴 길이
8+
*
9+
* 풀이 특이점
10+
* - 둘다 시간복잡도는 O(N)으로 생각되는데 Runtime의 결과 차이가 꽤 크게 나온 점
11+
*/
12+
13+
class Solution {
14+
public int longestConsecutive(int[] nums) {
15+
// (1) Set & num -1
16+
// 시간복잡도 : O(N)
17+
// Runtime : 1267ms Beats 5.15%
18+
// Memory : 63.30MB Beats 62.58%
19+
// Set<Integer> uniqueNums = Arrays.stream(nums).boxed().collect(Collectors.toSet());
20+
// int result = 0;
21+
22+
// for (int num : nums) {
23+
// if (uniqueNums.contains(num - 1)) continue;
24+
// int length = 1;
25+
// while (uniqueNums.contains(num + length)) length += 1;
26+
// result = Math.max(length, result);
27+
// }
28+
29+
// return result;
30+
31+
// (2) HashMap
32+
// 시간복잡도 : O(N)
33+
// Runtime : 38ms Beats 46.54%
34+
// Memory : 66.45MB Beats 51.28%
35+
HashMap<Integer, Boolean> hm = new HashMap<>();
36+
37+
for(int i=0; i<nums.length; i++){
38+
hm.put(nums[i], false);
39+
}
40+
41+
for(int key : hm.keySet()){
42+
if(hm.containsKey(key - 1)== false){
43+
hm.put(key, true);
44+
}
45+
}
46+
47+
int max = 0;
48+
for(int key : hm.keySet()){
49+
int k =1;
50+
if(hm.get(key) == true){
51+
while(hm.containsKey(key + k) == true){
52+
k++;
53+
}
54+
}
55+
56+
max = Math.max(max, k);
57+
}
58+
59+
return max;
60+
}
61+
}

0 commit comments

Comments
 (0)