File tree Expand file tree Collapse file tree 5 files changed +130
-0
lines changed
longest-consecutive-sequence Expand file tree Collapse file tree 5 files changed +130
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def containsDuplicate (self , nums : List [int ]) -> bool :
3
+ if len (nums ) == len (set (nums )):
4
+ return False
5
+ else :
6
+ return True
7
+
8
+
9
+
10
+ '''
11
+ 시간 복잡도: O(n)
12
+ - set(nums)는 내부적으로 nums의 모든 원소에 대해 __hash__() 및 __eq__() 호출 -> O(n)
13
+ - len() 함수는 O(1) -> 무시
14
+
15
+ 공간 복잡도: O(n)
16
+ - set(nums)는 nums의 원소를 모두 저장할 수 있게 공간 사용 -> 최악의 경우 O(n)
17
+ '''
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def rob (self , nums : List [int ]) -> int :
3
+ dp = [0 ] * (len (nums ))
4
+ dp [0 ] = nums [0 ]
5
+ if len (nums ) > 1 :
6
+ dp [1 ] = max (dp [0 ], nums [1 ])
7
+
8
+ for i in range (2 , len (nums )):
9
+ dp [i ] = max (dp [i - 2 ] + nums [i ], dp [i - 1 ])
10
+
11
+ return max (dp )
12
+
13
+ '''
14
+ 시간 복잡도: O(n log n)
15
+ - set() -> O(n)
16
+ - sorted() -> O(n log n)
17
+ - for loop -> O(n)
18
+ - max() -> O(n)
19
+
20
+ 공간 복잡도: O(n)
21
+ - set() -> O(n)
22
+ - sorted list -> O(n)
23
+ - rs -> O(n)
24
+ - O(3n) => O(n)
25
+ '''
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def longestConsecutive (self , nums : List [int ]) -> int :
3
+ if not nums :
4
+ return 0
5
+ s = set (nums )
6
+ nums = sorted (list (s ))
7
+ rs = []
8
+ cnt = 1
9
+
10
+ for i in range (len (nums )- 1 ):
11
+ if (nums [i ] + 1 ) == nums [i + 1 ]:
12
+ cnt += 1
13
+ else :
14
+ rs .append (cnt )
15
+ cnt = 1
16
+
17
+ rs .append (cnt )
18
+ return max (rs )
19
+
20
+ '''
21
+ 시간 복잡도: O(n log n)
22
+ - set(nums) -> O(n)
23
+ - sorted(list(s)) -> O(n log n)
24
+ - for loop -> O(n)
25
+ - O(2n) + O(n log n) => O(2n) 이 아니라 왜 O(n log n) 이지?
26
+
27
+ 공간 복잡도: O(n)
28
+ - set -> O(n)
29
+ - sorted() -> O(n)
30
+ - rs -> O(n)
31
+ - O(3n) => O(n)
32
+ '''
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def topKFrequent (self , nums : List [int ], k : int ) -> List [int ]:
3
+ plus = [0 ] * (10 ** 4 + 1 )
4
+ minus = [0 ] * (10 ** 4 + 1 )
5
+
6
+ for i in range (len (nums )):
7
+ if nums [i ] < 0 :
8
+ minus [- (nums [i ])] += 1
9
+ else :
10
+ plus [nums [i ]] += 1
11
+
12
+ ans = []
13
+ for i in range (k ):
14
+ if max (max (minus ), max (plus )) == max (plus ):
15
+ idx = plus .index (max (plus ))
16
+ ans .append (idx )
17
+ plus [idx ] = 0
18
+ else :
19
+ idx = minus .index (max (minus ))
20
+ ans .append (- (idx ))
21
+ minus [idx ] = 0
22
+
23
+ return ans
24
+
25
+ '''
26
+ 시간 복잡도: O(1)
27
+ - for loop -> 보통 O(n) 이지만, 길이 10001 짜리 고정 배열 -> O(1)로 취급 가능
28
+
29
+ 공간 복잡도: 입력 제외 -> O(1), 입력 포함 -> O(n)
30
+ - plus 배열: 10001 -> O(1)
31
+ - minus 배열: 10001 -> O(1)
32
+ - ans 배열: 길이 k -> O(k)
33
+ '''
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def twoSum (self , nums : List [int ], target : int ) -> List [int ]:
3
+ rs = []
4
+ for i in range (len (nums ) - 1 , - 1 , - 1 ):
5
+ pair = target - nums [i ]
6
+ if pair not in nums or i == nums .index (pair ):
7
+ continue
8
+ idx = nums .index (pair )
9
+ if pair in nums :
10
+ rs .append (i )
11
+ rs .append (idx )
12
+ break
13
+ return rs
14
+
15
+ '''
16
+ 시간 복잡도: O(n^2)
17
+ - nums.index(pair) -> O(n)
18
+ - for loop 안에서 nums.index(pair) 최대 2번 호출 -> O(2n^2) -> O(n^2)
19
+
20
+ 공간 복잡도: O(1)
21
+ - rs 배열에서 number 2개 저장 -> O(1) 공간
22
+ - nums 복사나 set/dict 없음
23
+ '''
You can’t perform that action at this time.
0 commit comments