From 6b57ed3d4ff3a6326d46a54a589297a0aa1f6326 Mon Sep 17 00:00:00 2001 From: Young Choi Date: Sat, 8 Nov 2025 13:53:02 -0800 Subject: [PATCH 1/5] [WHYjun] WEEK 01 solutions - (3/5) --- contains-duplicate/WHYjun.py | 3 +++ top-k-frequent-elements/WHYjun.py | 17 +++++++++++++++++ two-sum/WHYjun.py | 12 ++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 contains-duplicate/WHYjun.py create mode 100644 top-k-frequent-elements/WHYjun.py create mode 100644 two-sum/WHYjun.py diff --git a/contains-duplicate/WHYjun.py b/contains-duplicate/WHYjun.py new file mode 100644 index 0000000000..86e9be411e --- /dev/null +++ b/contains-duplicate/WHYjun.py @@ -0,0 +1,3 @@ +class Solution: + def containsDuplicate(self, nums: List[int]) -> bool: + return len(set(nums)) != len(nums) diff --git a/top-k-frequent-elements/WHYjun.py b/top-k-frequent-elements/WHYjun.py new file mode 100644 index 0000000000..7901a9cc5e --- /dev/null +++ b/top-k-frequent-elements/WHYjun.py @@ -0,0 +1,17 @@ +class Solution: + def topKFrequent(self, nums: List[int], k: int) -> List[int]: + # Time complexity: O(nlogn) + # Space Complexity: O(n) + + if len(nums) <= k: + return list(set(nums)) + + counts = {} + for num in nums: + if num not in counts: + counts[num] = 0 + counts[num] += 1 + + # The key of dictionary is unique. + sortedKeys = sorted(list(counts.keys()), key=lambda key: counts[key], reverse = True) + return sortedKeys[:k] diff --git a/two-sum/WHYjun.py b/two-sum/WHYjun.py new file mode 100644 index 0000000000..e34cc8a64f --- /dev/null +++ b/two-sum/WHYjun.py @@ -0,0 +1,12 @@ +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + memo = {} + + for i, num in enumerate(nums): + diff = target - num + if diff in memo: + # Each input would have exactly one solution + return [memo[diff], i] + memo[num] = i + + return [] From 8b97e4219ed7b18678e7fe422ea52722ad764ada Mon Sep 17 00:00:00 2001 From: Young Choi Date: Sat, 8 Nov 2025 13:56:59 -0800 Subject: [PATCH 2/5] [WHYjun] WEEK 01 solutions - (3/5) --- top-k-frequent-elements/WHYjun.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/top-k-frequent-elements/WHYjun.py b/top-k-frequent-elements/WHYjun.py index 7901a9cc5e..e79f3765aa 100644 --- a/top-k-frequent-elements/WHYjun.py +++ b/top-k-frequent-elements/WHYjun.py @@ -1,8 +1,8 @@ class Solution: def topKFrequent(self, nums: List[int], k: int) -> List[int]: - # Time complexity: O(nlogn) + # Time complexity: O(nlog(n)) # Space Complexity: O(n) - + if len(nums) <= k: return list(set(nums)) From 55a53cc36b8b36012b19b1f2d0d7b2fc751cf16a Mon Sep 17 00:00:00 2001 From: Young Choi Date: Sat, 8 Nov 2025 14:44:46 -0800 Subject: [PATCH 3/5] [WHYjun] WEEK 01 solutions - (4/5) --- longest-consecutive-sequence/WHYjun.py | 47 ++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 longest-consecutive-sequence/WHYjun.py diff --git a/longest-consecutive-sequence/WHYjun.py b/longest-consecutive-sequence/WHYjun.py new file mode 100644 index 0000000000..7665aafa06 --- /dev/null +++ b/longest-consecutive-sequence/WHYjun.py @@ -0,0 +1,47 @@ +import heapq + +class Solution: + def longestConsecutive(self, nums: List[int]) -> int: + # remove duplicates by using set + numsSet = set(nums) + + if len(numsSet) == 0 or len(numsSet) == 1: + return len(numsSet) + + # Use priority queue to sort in O(n) + sorted = [] + for num in numsSet: + heapq.heappush(sorted, num) + + prev = heapq.heappop(sorted) + answer, count = 1, 1 + + for i in range(len(numsSet) - 1): + popped = heapq.heappop(sorted) + if prev + 1 == popped: + count += 1 + else: + count = 1 + + prev = popped + answer = max(answer, count) + + return answer + + def longestConsecutiveUsingSetOnly(self, nums: List[int]) -> int: + # remove duplicates by using set + numsSet = set(nums) + + answer = 0 + + for num in numsSet: + # continue if it's not the longest consecutive + if num - 1 in numsSet: + continue + else: + count = 1 + while num + count in numsSet: + count += 1 + answer = max(answer, count) + + return answer From 0deab60c6cf24fd9daa70f7957d03159a7483e29 Mon Sep 17 00:00:00 2001 From: Young Choi Date: Sat, 8 Nov 2025 15:32:13 -0800 Subject: [PATCH 4/5] [WHYjun] WEEK 01 solutions - (5/5) --- house-robber/WHYjun.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 house-robber/WHYjun.py diff --git a/house-robber/WHYjun.py b/house-robber/WHYjun.py new file mode 100644 index 0000000000..364e03eaf7 --- /dev/null +++ b/house-robber/WHYjun.py @@ -0,0 +1,21 @@ +class Solution: + def rob(self, nums: List[int]) -> int: + # memo for DP + dp = {} + return self.robs(nums, dp, len(nums) - 1) + + def robs(self, nums: List[int], dp: Dict[int, int], houseToRob: int) -> int: + if houseToRob < 0: + return 0 + + if houseToRob - 2 not in dp: + dp[houseToRob - 2] = self.robs(nums, dp, houseToRob - 2) + + if houseToRob - 1 not in dp: + dp[houseToRob - 1] = self.robs(nums, dp, houseToRob - 1) + + + return max( + dp[houseToRob - 2] + nums[houseToRob], + dp[houseToRob - 1] + ) From 1f31fbe5471e83ed76583ca94622111732dc365f Mon Sep 17 00:00:00 2001 From: Young Choi Date: Tue, 11 Nov 2025 20:38:44 -0800 Subject: [PATCH 5/5] [WHYjun] Address comments to Week 01 solution --- longest-consecutive-sequence/WHYjun.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/longest-consecutive-sequence/WHYjun.py b/longest-consecutive-sequence/WHYjun.py index 7665aafa06..964eba2a3f 100644 --- a/longest-consecutive-sequence/WHYjun.py +++ b/longest-consecutive-sequence/WHYjun.py @@ -9,15 +9,12 @@ def longestConsecutive(self, nums: List[int]) -> int: return len(numsSet) # Use priority queue to sort in O(n) - sorted = [] - for num in numsSet: - heapq.heappush(sorted, num) + pq = heapq.heapify(list(numsSet)) - prev = heapq.heappop(sorted) + prev = heapq.heappop(pq) answer, count = 1, 1 - for i in range(len(numsSet) - 1): - popped = heapq.heappop(sorted) + popped = heapq.heappop(pq) if prev + 1 == popped: count += 1 else: