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