From 6d8c59825cd1b500ab76e6c38e19e39d1ac5763b Mon Sep 17 00:00:00 2001 From: sun912 Date: Mon, 12 Aug 2024 21:17:53 +0900 Subject: [PATCH 1/8] contains-duplicate solution --- contains-duplicate/sun912.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 contains-duplicate/sun912.py diff --git a/contains-duplicate/sun912.py b/contains-duplicate/sun912.py new file mode 100644 index 000000000..91a32a538 --- /dev/null +++ b/contains-duplicate/sun912.py @@ -0,0 +1,4 @@ +class Solution: + def containsDuplicate(self, nums: List[int]) -> bool: + nums_set = set(nums) + return len(nums_set) != len(nums) From f74db69c4075a3ae5f054392200b536459324b33 Mon Sep 17 00:00:00 2001 From: sun912 Date: Mon, 12 Aug 2024 21:26:35 +0900 Subject: [PATCH 2/8] Time complexity added --- contains-duplicate/sun912.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contains-duplicate/sun912.py b/contains-duplicate/sun912.py index 91a32a538..c86fb22de 100644 --- a/contains-duplicate/sun912.py +++ b/contains-duplicate/sun912.py @@ -1,3 +1,7 @@ +""" + Time complexity: O(n) +""" + class Solution: def containsDuplicate(self, nums: List[int]) -> bool: nums_set = set(nums) From e0ae4488466c271776ad466e3b150d9c1c8665a8 Mon Sep 17 00:00:00 2001 From: sun912 Date: Mon, 12 Aug 2024 22:11:15 +0900 Subject: [PATCH 3/8] number-of-1-bits solution --- number-of-1-bits/sun912.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 number-of-1-bits/sun912.py diff --git a/number-of-1-bits/sun912.py b/number-of-1-bits/sun912.py new file mode 100644 index 000000000..0df9a5d29 --- /dev/null +++ b/number-of-1-bits/sun912.py @@ -0,0 +1,13 @@ +""" + TC: O(log n) + SC: O(1) +""" + +class Solution: + def hammingWeight(self, n: int) -> int: + result = 0 + while n > 0: + result += n % 2 + n = n//2 + + return result \ No newline at end of file From 4841b41a2b2b92193015bc21abd8de8adcfae8ca Mon Sep 17 00:00:00 2001 From: sun912 Date: Tue, 13 Aug 2024 22:09:05 +0900 Subject: [PATCH 4/8] top-k-frequent-elements solution --- top-k-frequent-elements/sun912.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 top-k-frequent-elements/sun912.py diff --git a/top-k-frequent-elements/sun912.py b/top-k-frequent-elements/sun912.py new file mode 100644 index 000000000..e1e354d15 --- /dev/null +++ b/top-k-frequent-elements/sun912.py @@ -0,0 +1,24 @@ +""" + TC : O(klogn) + + used max heap + index -> count number + list value -> frequent nums +""" + +class Solution: + def topKFrequent(self, nums: List[int], k: int) -> List[int]: + count = {} + freq = [[] for i in range(len(nums)+1)] + + for num in nums: + count[num] = 1 + count.get(num, 0) + for key, val in count.items(): + freq[val].append(key) + + result = [] + for i in range(len(freq) - 1, 0, -1): + for n in freq[i]: + result.append(n) + if len(result) == k: + return result \ No newline at end of file From eb1c165220c888260ed71caff25dc978e84ede81 Mon Sep 17 00:00:00 2001 From: sun912 Date: Tue, 13 Aug 2024 22:19:52 +0900 Subject: [PATCH 5/8] top-k-frequent-elements solve --- top-k-frequent-elements/sun912.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/top-k-frequent-elements/sun912.py b/top-k-frequent-elements/sun912.py index e1e354d15..0819bd38e 100644 --- a/top-k-frequent-elements/sun912.py +++ b/top-k-frequent-elements/sun912.py @@ -21,4 +21,4 @@ def topKFrequent(self, nums: List[int], k: int) -> List[int]: for n in freq[i]: result.append(n) if len(result) == k: - return result \ No newline at end of file + return result From 8b22e3fd414c37f0c9dbb5af4dbf97c5873defb1 Mon Sep 17 00:00:00 2001 From: sun912 Date: Tue, 13 Aug 2024 22:25:37 +0900 Subject: [PATCH 6/8] comment changed --- top-k-frequent-elements/sun912.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/top-k-frequent-elements/sun912.py b/top-k-frequent-elements/sun912.py index 0819bd38e..5fe78ea9c 100644 --- a/top-k-frequent-elements/sun912.py +++ b/top-k-frequent-elements/sun912.py @@ -1,7 +1,7 @@ """ - TC : O(klogn) - - used max heap + TC : O(n) + SC: O(n) + used bucket sort index -> count number list value -> frequent nums """ From eda20caec7ad66fb169bfb95145434b95bf388bf Mon Sep 17 00:00:00 2001 From: sun912 Date: Thu, 15 Aug 2024 16:55:12 +0900 Subject: [PATCH 7/8] solved palindromic-substrings --- palindromic-substrings/sun912.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 palindromic-substrings/sun912.py diff --git a/palindromic-substrings/sun912.py b/palindromic-substrings/sun912.py new file mode 100644 index 000000000..325f61e65 --- /dev/null +++ b/palindromic-substrings/sun912.py @@ -0,0 +1,26 @@ +""" + TC: O(n^2) + + TC in first try was O(n^3). + It is the improved codes from neetcodes + key point is that each character in loop is considered to middle one. + Ant then, check left end and right end. + +""" +class Solution: + def countSubstrings(self, s: str) -> int: + result = 0 + for i in range(len(s)): + result += self.countPalindrom(s, i, i) + result += self.countPalindrom(s, i, i+1) + return result + + + def countPalindrom(self, s, left_end, right_end): + result = 0 + while left_end >= 0 and right_end < len(s) and s[left_end] == s[right_end]: + result += 1 + left_end -= 1 + right_end += 1 + + return result From 79de0bc294f9026f09ac85205e27a1917b2a8a58 Mon Sep 17 00:00:00 2001 From: sun912 Date: Fri, 16 Aug 2024 12:27:10 +0900 Subject: [PATCH 8/8] kth-smallest-element-in-a-bst solution --- kth-smallest-element-in-a-bst/sun912.py | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 kth-smallest-element-in-a-bst/sun912.py diff --git a/kth-smallest-element-in-a-bst/sun912.py b/kth-smallest-element-in-a-bst/sun912.py new file mode 100644 index 000000000..bbfceff85 --- /dev/null +++ b/kth-smallest-element-in-a-bst/sun912.py @@ -0,0 +1,27 @@ +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right + +""" + TC: O(n) in worst case + SC: O(n) in worst case +""" +class Solution: + def kthSmallest(self, root: Optional[TreeNode], k: int) -> int: + n = 0 + stack = [] + current_node = root + + while current_node or stack: + while current_node: + stack.append(current_node) + current_node = current_node.left + + current_node = stack.pop() + n += 1 + if n == k: + return current_node.val + current_node = current_node.right