Skip to content

Commit 9290955

Browse files
committed
solve: longest consecutive sequence 시간복잡도 개선
1 parent 80bed56 commit 9290955

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

longest-consecutive-sequence/JustHm.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,31 @@ class Solution {
2222
return max(answer, count)
2323
}
2424
}
25+
// MARK: time: O(n) 풀이
26+
/*
27+
몰랐던점 Set의 contains는 O(n) 아님, O(1)임 (내부적으로 Hash table로 구현되어있음)
28+
하지만 풀이 제출해보니까 속도가 sort 한거보다 덜나옴.. 왜?
29+
Set은 contains를 확인할때, 들어온 값을 hash로 변경후 검색, 버킷찾기, 충돌 검사 등을 거치기 때문에... O(1)은 맞는데 시간이 조금 걸린다.
30+
그렇기에 set방식으로 O(n)에 짠거보다 sorted 내장함수를 이용한 O(nlogn)의 실제 실행시간이 더 빠른것.
31+
*/
32+
class AnotherSolution {
33+
func longestConsecutive(_ nums: [Int]) -> Int {
34+
var numSet = Set(nums)
35+
var answer = 0
36+
37+
for num in numSet {
38+
// num-1이 없으면 시작지점이니까 여기부터 +1 하면서 길이 확인
39+
// num-1이 있으면 그냥 무시
40+
if !numSet.contains(num-1) { //Set의 contains는 O(1)임!! (내부적으로 Hash table로 구현되어있기 때문)
41+
var count = 1
42+
var temp = num + 1
43+
while numSet.contains(temp) {
44+
count += 1
45+
temp += 1
46+
}
47+
answer = max(answer, count)
48+
}
49+
}
50+
return answer
51+
}
52+
}

0 commit comments

Comments
 (0)