From 872e50b76ccc3cfa452686ae21fd74e762343931 Mon Sep 17 00:00:00 2001 From: Jeongwon Na Date: Mon, 22 Jun 2026 21:54:28 +0200 Subject: [PATCH 1/4] solve: two sum --- contains-duplicate/njngwn.py | 11 +++++++++++ two-sum/njngwn.py | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 contains-duplicate/njngwn.py create mode 100644 two-sum/njngwn.py diff --git a/contains-duplicate/njngwn.py b/contains-duplicate/njngwn.py new file mode 100644 index 0000000000..68b39c5eba --- /dev/null +++ b/contains-duplicate/njngwn.py @@ -0,0 +1,11 @@ +class Solution: + # Time Complexity: O(nlogn), n: len(nums) + # Space Complexity: O(1) + def containsDuplicate(self, nums: List[int]) -> bool: + nums.sort() # O(nlogn) + + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i - 1]: + return True + + return False diff --git a/two-sum/njngwn.py b/two-sum/njngwn.py new file mode 100644 index 0000000000..68b39c5eba --- /dev/null +++ b/two-sum/njngwn.py @@ -0,0 +1,11 @@ +class Solution: + # Time Complexity: O(nlogn), n: len(nums) + # Space Complexity: O(1) + def containsDuplicate(self, nums: List[int]) -> bool: + nums.sort() # O(nlogn) + + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i - 1]: + return True + + return False From 86a8d58c82de13232cbda42dc005ae88afea2e7f Mon Sep 17 00:00:00 2001 From: Jeongwon Na Date: Sat, 27 Jun 2026 13:19:51 +0200 Subject: [PATCH 2/4] solve longest consecutive sequence --- longest-consecutive-sequence/njngwn.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 longest-consecutive-sequence/njngwn.py diff --git a/longest-consecutive-sequence/njngwn.py b/longest-consecutive-sequence/njngwn.py new file mode 100644 index 0000000000..ffca41abf9 --- /dev/null +++ b/longest-consecutive-sequence/njngwn.py @@ -0,0 +1,19 @@ +class Solution: + # Time Complexity: O(nlogn), n: len(nums) + # Space Complexity: O(n), n: len(nums) + def longestConsecutive(self, nums: List[int]) -> int: + if not nums: + return 0 + + nums = sorted(set(nums)) # O(nlogn) + longest = 1 + length = 1 + + for i in range(1, len(nums)): + if nums[i] - nums[i-1] == 1: + length += 1 + longest = max(longest, length) + else: + length = 1 + + return longest From abcf08efdedcec1b345ab98410003c0bc4eb53a7 Mon Sep 17 00:00:00 2001 From: Jeongwon Na Date: Sat, 27 Jun 2026 13:50:26 +0200 Subject: [PATCH 3/4] solve house robber --- house-robber/njngwn.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 house-robber/njngwn.py diff --git a/house-robber/njngwn.py b/house-robber/njngwn.py new file mode 100644 index 0000000000..e613e47788 --- /dev/null +++ b/house-robber/njngwn.py @@ -0,0 +1,17 @@ +class Solution: + # Time Complexity: O(n), n: len(nums) + # Space Complextiy: O(1) + def rob(self, nums: List[int]) -> int: + if not nums: + return 0 + if len(nums) == 1: + return nums[0] + + two_ago = nums[0] + one_ago = max(nums[0], nums[1]) + + for i in range(2, len(nums)): + current = max(one_ago, two_ago + nums[i]) + two_ago, one_ago = one_ago, current + + return one_ago From d1efba390fc276db2bf7333e3e86c243013cc292 Mon Sep 17 00:00:00 2001 From: Jeongwon Na Date: Sat, 27 Jun 2026 14:06:27 +0200 Subject: [PATCH 4/4] solve top k frequent elements --- top-k-frequent-elements/njngwn.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 top-k-frequent-elements/njngwn.py diff --git a/top-k-frequent-elements/njngwn.py b/top-k-frequent-elements/njngwn.py new file mode 100644 index 0000000000..701ef854b7 --- /dev/null +++ b/top-k-frequent-elements/njngwn.py @@ -0,0 +1,28 @@ +from collections import Counter + + +class Solution: + # Solution 1 + # Time Complexity: O(nlogn), n: len(nums) + # Space Complexity: O(n), n:len(nums) + def topKFrequent(self, nums: List[int], k: int) -> List[int]: + counter = {} + for num in nums: + counter[num] = counter.get(num, 0) + 1 + sorted_nums = sorted(counter, key=lambda num: counter[num]) + + return sorted_nums[-k:] + + # Solution 2 + # Time Complexity: O(n), n: len(nums) + # Space Complexity: O(n), n: len(nums) + def topKFrequent(self, nums: List[int], k: int) -> List[int]: + counter = Counter(nums) + buckets = [[] for _ in range(len(nums) + 1)] + + for num, cnt in counter.items(): + buckets[cnt].append(num) + + sorted_nums = [item for bucket in buckets for item in bucket] + + return sorted_nums[-k:]