File tree Expand file tree Collapse file tree 5 files changed +162
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 5 files changed +162
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def combinationSum (self , candidates : List [int ], target : int ) -> List [List [int ]]:
3
+ """
4
+ Intuition:
5
+ 리μ€νΈμ κ° μμλ μ€λ³΅ν΄μ μ¬μ©ν μ μλ€.
6
+ κ·Έλ λ€λ©΄ targetμ μ¬κ·μ μΌλ‘ μμλ₯Ό μ¬μ©ν΄μ
7
+ λͺ¨λ κ²½μ°μ μλ₯Ό νμνλ€.
8
+
9
+ Time Complexity:
10
+ O(N^2 log N):
11
+ μ΄κΈ°μ 리μ€νΈμ μμλ₯Ό μ λ ¬νλ λ°μ O(N log N)μ΄ μμλλ€.
12
+ λν, μ¬κ· ν¨μλ μ΅λ Nλ² νΈμΆλ μ μμΌλ©°
13
+ κ° μ¬κ· ν¨μμμλ μ λ ¬νμ¬ μΈνΈμ μΆκ°νλ κ²½μ°
14
+ O(N log N)μ΄ μμλκ³ ,
15
+ Nκ°μ μμμ λν΄ forλ¬Έμ λ°λ³΅νλ€.
16
+ λ°λΌμ O(N^2 log N)μ μκ°λ³΅μ‘λκ° μμλλ€.
17
+
18
+ Space Complexity:
19
+ O(N):
20
+ μ΅μ
μ κ²½μ° answer setμ λλ΅ Nκ°μ tupleμ΄ μ μ₯λλ€.
21
+ λ°λΌμ O(N)μ 곡κ°λ³΅μ‘λκ° μμλλ€.
22
+ """
23
+ candidates .sort () # O(N log N)
24
+ answer_set = set ()
25
+
26
+
27
+ def dfs (n , arr ):
28
+ if n == 0 :
29
+ answer_set .add (tuple (sorted (arr ))) # O(N log N)
30
+ return
31
+
32
+ for candidate in candidates : # O(N)
33
+ if n >= candidate :
34
+ arr .append (candidate )
35
+ dfs (n - candidate , arr )
36
+ arr .pop ()
37
+
38
+
39
+ dfs (target , []) # O(N)
40
+ answer = list (answer_set )
41
+ return answer
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def maxSubArray (self , nums : List [int ]) -> int :
3
+ """
4
+ Intuition:
5
+ μ΄μ κΉμ§μ λμ ν©μμ νμ¬ μμλ₯Ό μΆκ°ν μ§ λ§μ§μ λν
6
+ κ²°μ μ λ§€ iterationλ§λ€ λ°λ³΅νλ€.
7
+ νμ¬ μμλ₯Ό μΆκ°νμ κ²½μ°(λμ ν© + νμ¬ μμ)μ
8
+ νμ¬ μμλ₯Ό μμμΌλ‘ νλ κ²½μ°(νμ¬ μμ)λ₯Ό λΉκ΅νμ¬
9
+ dp λ°°μ΄μ κ°±μ νλ€.
10
+
11
+ Time Complexity:
12
+ O(N):
13
+ 리μ€νΈλ₯Ό 1λ² μννλ©° λ΅μ μ°ΎμΌλ―λ‘,
14
+ O(N)μ μκ°λ³΅μ‘λκ° μμλλ€.
15
+
16
+ Space Complexity:
17
+ O(N):
18
+ dp λ°°μ΄μ Nκ°μ time stepμ μ μ₯νλ―λ‘
19
+ O(N)μ 곡κ°λ³΅μ‘λκ° μμλλ€.
20
+
21
+ Key takeaway:
22
+ μ΄κΈ°μλ two pointer λ°©μμ μκ°νμΌλ
23
+ ν΄κ²°μ νμ§ λͺ»ν΄μ λ΅μμ νμΈνλ€.
24
+ O(N)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ κ²½μ°, DPλ νμ΄κ°
25
+ λ μ μμμ μΈμ§νμ.
26
+ """
27
+ dp = [0 for _ in nums ]
28
+ dp [0 ] = nums [0 ]
29
+ for i in range (1 , len (nums )):
30
+ cumsum = dp [i - 1 ] + nums [i ]
31
+ cur = nums [i ]
32
+ if cumsum > cur :
33
+ dp [i ] = cumsum
34
+ else :
35
+ dp [i ] = cur
36
+
37
+ return max (dp )
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def productExceptSelf (self , nums : List [int ]) -> List [int ]:
3
+ """
4
+ Intuition:
5
+ iλ²μ§Έ μΈλ±μ€μ κ°μ κ³μ°νκΈ° μν΄μλ
6
+ 0 ~ i-1 κΉμ§μ κ°κ³Ό i+1 ~ N κΉμ§μ κ°μ λͺ¨λ κ³±ν΄μΌ νλ€.
7
+ μ΄μ λμ κ³±μ μ μ₯νμ¬, κ³μ°νλ€.
8
+
9
+ Time Complexity:
10
+ O(N):
11
+ 리μ€νΈλ₯Ό 1λ² μννλ©° λ΅μ μ°ΎμΌλ―λ‘,
12
+ O(N)μ μκ°λ³΅μ‘λκ° μμλλ€.
13
+
14
+ Space Complexity:
15
+ O(N):
16
+ forward λ°°μ΄κ³Ό backward λ°°μ΄μ Nκ°μ μμλ₯Ό μ μ₯νλ―λ‘
17
+ O(N)μ 곡κ°λ³΅μ‘λκ° μμλλ€.
18
+
19
+ Key takeaway:
20
+ μ€μΊνμ¬ κ°μ μ μ₯ν΄λλ λ°©μμ μμ§νμ.
21
+ """
22
+ for_val = 1
23
+ back_val = 1
24
+ forward = []
25
+ backward = []
26
+ for i in range (len (nums )):
27
+ forward .append (for_val )
28
+ backward .append (back_val )
29
+
30
+ for_val *= nums [i ]
31
+ back_val *= nums [- (i + 1 )]
32
+ backward = backward [::- 1 ]
33
+
34
+ answer = [forward [i ] * backward [i ] for i in range (len (nums ))]
35
+ return answer
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def reverseBits (self , n : int ) -> int :
3
+ """
4
+ Intuition:
5
+ λΉνΈλ₯Ό μμμΌλ‘ μννλ€.
6
+ answerμλ μ΅λκ°(2^31)λΆν° μ΅μκ°(2^0)μΌλ‘ κ°μνλ
7
+ λ°©μμΌλ‘ μ
λ°μ΄νΈνλ€.
8
+
9
+ Time Complexity:
10
+ O(N):
11
+ nμ 1λ² μννλ©° λ΅μ μ°ΎμΌλ―λ‘,
12
+ O(N)μ μκ°λ³΅μ‘λκ° μμλλ€.
13
+
14
+ Space Complexity:
15
+ O(1):
16
+ answerμ κ°μ μ
λ°μ΄νΈ νλ―λ‘, μμμ
17
+ 곡κ°λ³΅μ‘λκ° μμλλ€.
18
+
19
+ Key takeaway:
20
+ μ«μλ₯Ό binary stringμΌλ‘ λ§λλ bin() λ©μλλ₯Ό
21
+ μκ² λμλ€.
22
+ """
23
+ answer = 0
24
+ for i , bit in enumerate (bin (n )[2 :][::- 1 ]):
25
+ answer += int (bit ) * 2 ** (31 - i )
26
+ return answer
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
+ """
4
+ Intuition:
5
+ κΈ°μ‘΄μ νμλ 3sum λ¬Έμ μ μ μ¬νκ²,
6
+ ν΄μμ νμ¬ μ«μμ λν΄μ targetμ΄ λλ κ°μ μ°Ύλλ€.
7
+ λ§μ½ μμ κ²½μ°, ν΄μμ νμ¬ κ°κ³Ό μΈλ±μ€λ₯Ό μ μ₯νλ€.
8
+
9
+ Time Complexity:
10
+ O(N):
11
+ ν΄μλ μ κ·Όνλ λ°μ O(1)μ΄ μμλκ³ ,
12
+ μ΄ Nλ² λ°λ³΅ν΄μΌ νλ―λ‘ μκ°λ³΅μ‘λλ O(N)μ΄λ€.
13
+
14
+ Space Complexity:
15
+ O(N):
16
+ μ΅μ
μ κ²½μ° ν΄μμ Nκ°μ μ«μμ μΈλ±μ€λ₯Ό μ μ₯ν΄μΌ νλ€.
17
+ """
18
+ complement_dict = {}
19
+ for i , num in enumerate (nums ):
20
+ if target - num in complement_dict :
21
+ return [complement_dict [target - num ], i ]
22
+ else :
23
+ complement_dict [num ] = i
You canβt perform that action at this time.
0 commit comments