File tree Expand file tree Collapse file tree 5 files changed +135
-0
lines changed
kth-smallest-element-in-a-bst Expand file tree Collapse file tree 5 files changed +135
-0
lines changed Original file line number Diff line number Diff line change
1
+ """TC: O(n)? O(n^2)?, SC: O(n)
2
+
3
+ ref: https://wiki.python.org/moin/TimeComplexity
4
+ set๋ dict์ ๊ฑฐ์ ๋น์ทํ๊ฒ ๊ตฌํ๋์ด ์๋๋ฐ,
5
+ dict์ `Set Item`์ Average Case๋ O(1)์ด๋๋ผ๋
6
+ Amortized Worst Case๊ฐ O(n)์ด๋ค!
7
+
8
+ ์ฆ, set์ ์์ดํ
์ ์ถ๊ฐํ ๋๋ง๋ค ํด์ ์ถฉ๋์ด ์ผ์ด๋ ๊ฒฝ์ฐ
9
+ ์ต์
์ ๊ฒฝ์ฐ O(n^2)์ด ๊ฑธ๋ฆฌ๋ฏ๋ก, ์๋์ set(nums)์
10
+ TC๊ฐ O(n^2)์ด ๋๋ ๊ฒ์ผ๊น..?
11
+
12
+ set(nums)์ ๊ฒฐ๊ณผ๊ฐ ์ต์
์ ๊ฒฝ์ฐ SC๊ฐ O(n)์ด๋ค.
13
+ """
14
+
15
+
16
+ class Solution :
17
+ def containsDuplicate (self , nums : List [int ]) -> bool :
18
+ return len (nums ) != len (set (nums ))
Original file line number Diff line number Diff line change
1
+ """TC: O(n), SC: O(n)
2
+
3
+ BST์ ์ ์ฒด ๋
ธ๋ ๊ฐ์๊ฐ n๊ฐ๋ผ๊ณ ๊ฐ์ .
4
+
5
+ TC๋ ์ต์
์ ๊ฒฝ์ฐ BST ๋
ธ๋ ์ ์ฒด๋ฅผ ์ํํด์ผ ํ๋ฏ๋ก O(n).
6
+
7
+ ๋
ธ๋๋ฅผ ์ํํ๋ฉด์ ์ง๋์จ ๋
ธ๋ ๊ฐ์ ๋ฐ๋ก ์ ์ฅํ์ง ์๊ณ ์นด์ดํฐ๋ก ์ฒ๋ฆฌํ๊ณ ์๋ค.
8
+ ์ฆ, traverse ํจ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋ ๋ถ๋ถ์ ์ฝ ์คํ์ ๊น์ด ๊ฐ๋ง ๊ณ ๋ คํ๋ฉด ๋๋๋ฐ,
9
+ root ๋
ธ๋๋ถํฐ ์ ๋ถ left๋ก ์ด์ด์ง ํธ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง ๊ฒฝ์ฐ SC๊ฐ O(n)์ผ๋ก ์ต์
.
10
+ """
11
+
12
+
13
+ # Definition for a binary tree node.
14
+ # class TreeNode:
15
+ # def __init__(self, val=0, left=None, right=None):
16
+ # self.val = val
17
+ # self.left = left
18
+ # self.right = right
19
+ class Solution :
20
+ def kthSmallest (self , root : Optional [TreeNode ], k : int ) -> int :
21
+ global cnt
22
+ cnt = 0
23
+
24
+ def traverse (node : Optional [TreeNode ]) -> int :
25
+ """์์ด๋์ด:
26
+ ๋
ธ๋์ ์ผ์ชฝ ์์์ ๋จผ์ ์ํํ๊ณ ,
27
+ ๋ณธ์ธ์ ๊ฐ์ ์ฒดํฌํ๋ฉด์ cnt๊ฐ์ ๋๋ฆฌ๊ณ ,
28
+ ๋
ธ๋์ ์ค๋ฅธ์ชฝ ์์์ ์ํ.
29
+
30
+ ์ํํ๋ค๊ฐ cnt๊ฐ์ด k๊ฐ ๋๋ฉด, ์ฆ, k๋ฒ์งธ ์์ ์์๋ฅผ ์ฐพ์ผ๋ฉด
31
+ ์ํ๋ฅผ ๋ฉ์ถ๊ณ ์ฐพ์ ๊ฐ์ ๋ฆฌํด.
32
+
33
+ ๋ฆฌํด๋ ๊ฐ์ด -1์ธ ๊ฒฝ์ฐ ์ํ ์ค ์ํ๋ ๊ฐ์ ์ฐพ์ง ๋ชปํ๋ค๋ ๋ป์ด๋ค.
34
+ ๋ฌธ์ ์กฐ๊ฑด์์ ๋
ธ๋์ val ๊ฐ์ด 0 ์ด์์ด๋ผ๊ณ ๋์ด์์ด์ -1์ ์ ํ.
35
+ """
36
+ global cnt
37
+ return - 1 if not node \
38
+ else v if (v := traverse (node .left )) >= 0 \
39
+ else node .val if (cnt := cnt + 1 ) == k \
40
+ else traverse (node .right )
41
+
42
+ return traverse (root )
Original file line number Diff line number Diff line change
1
+ """TC: O(log n), SC: O(log n)
2
+
3
+ n์ด 2๋ฐฐ ์ปค์ง๋ฉด bin(n)์ ๊ธธ์ด๊ฐ 1 ๋์ด๋๊ณ , ์ด bin(n) ๊ฐ์
4
+ ์ ๋ถ ์ํํ๋ฏ๋ก O(log n).
5
+ bin(n)์ ๋ฆฌ์คํธ๋ก ๋ฐ๊ฟ์ sum์ ํ์ผ๋ฏ๋ก SC๋ O(log n)์ด ๋๋ค.
6
+
7
+ ํ์ง๋ง n์ ํฌ๊ธฐ๊ฐ 2^31 - 1 ์ดํ๋ก ์ ํ๋์ด ์์ผ๋ฏ๋ก
8
+ TC, SC ๋ถ์์ด ํฌ๊ฒ ์๋ฏธ์์ง ์์.
9
+ """
10
+
11
+
12
+ class Solution :
13
+ def hammingWeight (self , n : int ) -> int :
14
+ return sum ([i == "1" for i in bin (n )])
Original file line number Diff line number Diff line change
1
+ """TC: O(n^2), SC: O(1)
2
+
3
+ SC๋ sol์ด๋ผ๋ ์นด์ดํฐ ๊ฐ๋ง ๊ด๋ฆฌํ๊ณ ์์ผ๋ฏ๋ก O(1).
4
+
5
+ TC๋
6
+ - ํฐ๋ฆฐ๋๋กฌ์ ์ค์ฌ์ ์ ์์น๊ฐ range(l)๋ก ์ฃผ์ด์ง๋ฏ๋ก ์ฌ๊ธฐ์ O(n),
7
+ - ์ค์ฌ์ ์์ ์์๊ณผ ๋์ ํ ์นธ์ฉ ๋๋ ค๊ฐ๋ฉด์ ํฐ๋ฆฐ๋๋กฌ ์ฒดํฌํ ๋ O(1),
8
+ - ์์๊ณผ ๋์ด ์ต๋๋ก ๋์ด๋ ์ ์๋ ๊ธธ์ด๊ฐ O(n),
9
+ ์ฆ, O(n^2).
10
+ """
11
+
12
+
13
+ class Solution :
14
+ def countSubstrings (self , x : str ) -> int :
15
+ l = len (x )
16
+ sol = 0
17
+
18
+ for i in range (l ):
19
+ # ์์๊ณผ ๋์ด ์ผ์นํ๋ ์ํ์์ ์์.
20
+ # ์ฆ, ํฐ๋ฆฐ๋๋กฌ์ ๊ธธ์ด๊ฐ ํ์.
21
+ s = e = i
22
+ b = True
23
+ while b :
24
+ sol += (b := (0 <= s and e < l and x [s ] == x [e ]))
25
+ s -= 1
26
+ e += 1
27
+
28
+ # ์์๊ณผ ๋์ด ํ๋ ์ฐจ์ด๋๋ ์ํ์์ ์์.
29
+ # ์ฆ, ํฐ๋ฆฐ๋๋กฌ์ ๊ธธ์ด๊ฐ ์ง์.
30
+ s = e = i
31
+ e += 1
32
+ b = True
33
+ while b :
34
+ sol += (b := (0 <= s and e < l and x [s ] == x [e ]))
35
+ s -= 1
36
+ e += 1
37
+
38
+ return sol
Original file line number Diff line number Diff line change
1
+ """TC: O(n log n), SC: O(n)
2
+
3
+ 1
4
+ nums๋ฅผ ์ํํ๋ฉด์ dict๋ฅผ ์ฑ์ฐ๋ ๋ฐ์ TC: O(n), SC: O(n)
5
+ * ๋จ, dict์์ `Set Item` ํ ๋
6
+ Amortized Worst Case O(n) ๋ง๊ณ
7
+ Average Case O(1) ์ ์ฉ ๊ฐ์
8
+
9
+ 2
10
+ dict์ (๊ฐ, ํค) ํํ์ sortingํ๋ ๋ฐ์ TC: O(n log n), SC: O(n)
11
+ * ์ด๋ ๊ฐ์ด ํด์๋ก ์์ ์ค๊ฒ ํ๊ธฐ ์ํด ๊ฐ์ ์์๋ก ๋ฐ๊ฟ์คฌ๋ค.
12
+
13
+ 3
14
+ sorted๋ ๋ฆฌ์คํธ์์ ํํ์ ๋ ๋ฒ์งธ ์์ดํ
๋ง ๋ฝ์ ๋ค์์
15
+ ๋ฆฌ์คํธ์ ์ k๊ฐ์ ์์ดํ
๋ฆฌํด.
16
+ """
17
+
18
+
19
+ class Solution :
20
+ def topKFrequent (self , nums : List [int ], n : int ) -> List [int ]:
21
+ d = {}
22
+ [d .update ({i : d .get (i , 0 ) + 1 }) for i in nums ]
23
+ return [i for _ , i in sorted ([(- v , k ) for k , v in d .items ()])][:n ]
You canโt perform that action at this time.
0 commit comments