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