File tree Expand file tree Collapse file tree 5 files changed +153
-0
lines changed
product-of-array-except-self
validate-binary-search-tree Expand file tree Collapse file tree 5 files changed +153
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ Blind 75 - LeetCode Problem 15. 3Sum
3+ https://leetcode.com/problems/3sum/
4+ ์๊ฐ๋ณต์ก๋ O(n^2)
5+ """
6+ from typing import List
7+
8+ class Solution :
9+ def threeSum (self , nums : List [int ]) -> List [List [int ]]:
10+ nums .sort ()
11+ answer = []
12+ n = len (nums )
13+
14+ for i in range (n ):
15+ if i > 0 and nums [i ] == nums [i - 1 ]:
16+ continue # ์ค๋ณต ์์ ์คํต
17+
18+ left , right = i + 1 , n - 1
19+ while left < right :
20+ total = nums [i ] + nums [left ] + nums [right ]
21+
22+ if total == 0 :
23+ answer .append ([nums [i ], nums [left ], nums [right ]])
24+ left += 1
25+ right -= 1
26+
27+ # ์ค๋ณต๊ฐ ๊ฑด๋๋ฐ๊ธฐ
28+ while left < right and nums [left ] == nums [left - 1 ]:
29+ left += 1
30+ while left < right and nums [right ] == nums [right + 1 ]:
31+ right -= 1
32+
33+ elif total < 0 :
34+ left += 1 # ํฉ์ด ์์ผ๋ left๋ฅผ ํค์์ผ ํจ
35+
36+ else :
37+ right -= 1 # ํฉ์ด ํฌ๋ right๋ฅผ ์ค์ฌ์ผ ํจ
38+
39+ return answer
40+
Original file line number Diff line number Diff line change 1+ """
2+ Blind 75 - LeetCode Problem 70. Climbing Stairs
3+ https://leetcode.com/problems/climbing-stairs/
4+
5+ ๊ณ๋จ์ด n๊ฐ, ํ ๋ฒ์ 1์นธ ๋๋ 2์นธ์ฉ ์ค๋ฅผ ์ ์๋ค.
6+ combinations๋ฅผ ์ผ๋๋ ์๊ฐ์ด๊ณผ ๋ฐ์ (O(2^n))
7+
8+ DP๋ฅผ ์ด์ฉํด ์๊ฐ๋ณต์ก๋ O(n) ๊ณต๊ฐ๋ณต์ก๋ O(1)๋ก ํ๊ธฐ
9+ f(n) = f(n-1) + f(n-2)
10+ """
11+ class Solution :
12+ def climbStairs (self , n : int ) -> int :
13+ if n <= 2 :
14+ return n
15+
16+ one_before = 2 # n=2
17+ two_before = 1 # n=1
18+
19+ for _ in range (3 , n + 1 ):
20+ current = one_before + two_before # f(1) = f(n-1) + f(n-2)
21+ two_before = one_before # f ๋ฐ๊ธฐ
22+ one_before = current # f ๋ฐ๊ธฐ
23+
24+ return current
25+
Original file line number Diff line number Diff line change 1+ """
2+ Blind75 - 4. Product of Array Except Self
3+ https://leetcode.com/problems/product-of-array-except-self/
4+ ์กฐ๊ฑด :
5+ - ๋ถํ ์์ด O(n) ์๊ฐ ๋ณต์ก๋ ์ดํ๋ก ํ์ด๋ผ
6+ - nums์ ๋ชจ๋ ์์์ ๊ณฑ์ 32๋นํธ ์ ์ ๋ฒ์ ๋ด์ ๋ค์ด์จ๋ค
7+ - ๋๋์
๊ธ์ง
8+
9+ 0์ด ๋ช๊ฐ์ธ๊ฐ?
10+ - 2๊ฐ ์ด์ : ๋ชจ๋ 0์ธ ๋ฐฐ์ด
11+ - 1๊ฐ : 0 ๋ณธ์ธ ์ ์ธ๋ 0์ธ ๋ฐฐ์ด
12+ - 0๊ฐ : ์ข ์ฐ ๊ฐ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์
์ ํด์ฃผ๋ฉด O(2n)์ผ๋ก ๋ฐฐ์ด ์์ฑ, O(n)์ผ๋ก ์ ๋ต ๋ฐฐ์ด ์์ฑํ๋ฏ๋ก O(n)
13+ """
14+ from typing import List
15+
16+ class Solution :
17+ def productExceptSelf (self , nums : List [int ]) -> List [int ]:
18+ zero_count = nums .count (0 )
19+ if zero_count > 1 :
20+ return [0 ] * len (nums )
21+ elif zero_count == 1 :
22+ all_product = 1
23+ for num in nums :
24+ all_product *= num if num != 0 else 1
25+ return [0 if num != 0 else all_product for num in nums ]
26+
27+ else :
28+ left_product = [nums [0 ]]
29+ right_product = [nums [- 1 ]]
30+ for i in range (1 ,len (nums )):
31+ left_product .append (left_product [i - 1 ]* nums [i ])
32+ right_product .append (right_product [i - 1 ]* nums [- 1 - i ])
33+
34+ answer = []
35+ for i in range (len (nums )):
36+ answer .append ((left_product [i - 1 ] if i > 0 else 1 )* (right_product [- 2 - i ] if i < len (nums )- 1 else 1 ))
37+ return answer
38+
Original file line number Diff line number Diff line change 1+ """
2+ Blind 75 - LeetCode Problem 242: Valid Anagram
3+ https://leetcode.com/problems/valid-anagram/
4+
5+ t๊ฐ s์ ์ ๋๊ทธ๋จ์ธ์ง ํ์ธํ๊ธฐ
6+ """
7+ from collections import Counter
8+
9+ class Solution :
10+ def isAnagram (self , s : str , t : str ) -> bool :
11+ if len (s ) != len (t ):
12+ return False
13+
14+ return Counter (s ) == Counter (t )
15+
Original file line number Diff line number Diff line change 1+ """
2+ Blind 75 - LeetCode Problem 98: Validate Binary Search Tree
3+ https://leetcode.com/problems/validate-binary-search-tree/
4+
5+ ์ค์ ์ํ - ์ผ์ชฝ ์๋ธํธ๋ฆฌ -> ๋ฃจํธ -> ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ
6+ ์ค์ ์ํํ ๊ฐ์ด ์ค๋ฆ์ฐจ์์ธ์ง ํ์ธํ๋ฉด ๋๋ค.
7+ """
8+ from typing import Optional , List
9+
10+ # Definition for a binary tree node.
11+ class TreeNode :
12+ def __init__ (self , val = 0 , left = None , right = None ):
13+ self .val = val
14+ self .left = left
15+ self .right = right
16+
17+ class Solution : # root = [2,1,3] answer = True
18+ def traverse (self , node : Optional [TreeNode ], inorder : List [int ]) -> None :
19+ if not node :
20+ return
21+ self .traverse (node .left , inorder )
22+ inorder .append (node .val )
23+ self .traverse (node .right , inorder )
24+
25+
26+ def isValidBST (self , root : Optional [TreeNode ]) -> bool :
27+ inorder = []
28+ self .traverse (root , inorder )
29+
30+ for i in range (1 , len (inorder )):
31+ if inorder [i ] <= inorder [i - 1 ]:
32+ return False
33+
34+ return True
35+
You canโt perform that action at this time.
0 commit comments