From cb001dc19d52c99327f4e26f857e286e27f4a3ca Mon Sep 17 00:00:00 2001 From: sooooo-an Date: Thu, 24 Jul 2025 22:47:19 +0900 Subject: [PATCH 1/5] contains-duplicate --- contains-duplicate/sooooo-an.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 contains-duplicate/sooooo-an.ts diff --git a/contains-duplicate/sooooo-an.ts b/contains-duplicate/sooooo-an.ts new file mode 100644 index 000000000..7a04524fd --- /dev/null +++ b/contains-duplicate/sooooo-an.ts @@ -0,0 +1,7 @@ +function containsDuplicate(nums: number[]): boolean { + return new Set(nums).size !== nums.length; +} +/** + * runtime: 24ms / Beats 27.12% + * memory 74.42MB / Beats 55.98% + */ From 84a8898a1799801f6d30063e55b4d548c7777e89 Mon Sep 17 00:00:00 2001 From: sooooo-an Date: Thu, 24 Jul 2025 22:47:37 +0900 Subject: [PATCH 2/5] two-sum --- two-sum/sooooo-an.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 two-sum/sooooo-an.ts diff --git a/two-sum/sooooo-an.ts b/two-sum/sooooo-an.ts new file mode 100644 index 000000000..974ec619c --- /dev/null +++ b/two-sum/sooooo-an.ts @@ -0,0 +1,14 @@ +function twoSum(nums: number[], target: number): number[] { + for (let i = 0; i < nums.length; i++) { + for (let j = i + 1; j < nums.length; j++) { + if (nums[i] + nums[j] === target) { + return [i, j]; + } + } + } +} + +/** + * runtime: 30ms / Beats 38.67% + * memory 56.56MB / Beats 63.38% + */ From e902aaa518a932f038efd14542592d11b54953bb Mon Sep 17 00:00:00 2001 From: sooooo-an Date: Thu, 24 Jul 2025 22:48:44 +0900 Subject: [PATCH 3/5] top-k-frequent-elements --- top-k-frequent-elements/sooooo-an.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 top-k-frequent-elements/sooooo-an.ts diff --git a/top-k-frequent-elements/sooooo-an.ts b/top-k-frequent-elements/sooooo-an.ts new file mode 100644 index 000000000..dee94461b --- /dev/null +++ b/top-k-frequent-elements/sooooo-an.ts @@ -0,0 +1,16 @@ +function topKFrequent(nums: number[], k: number): number[] { + const frequentMap = new Map(); + + for (const num of nums) { + frequentMap.set(num, (frequentMap.get(num) ?? 0) + 1); + } + + const sorted = Array.from(frequentMap.entries()).sort((a, b) => b[1] - a[1]); + + return sorted.slice(0, k).map(([key]) => Number(key)); +} + +/** + * Runtime 9ms / 78.90% + * Memory 60.130MB / 66.67% + */ From b86951ec250824370d52360aeb90d43f878b3cf3 Mon Sep 17 00:00:00 2001 From: sooooo-an Date: Thu, 24 Jul 2025 22:48:57 +0900 Subject: [PATCH 4/5] longest-consecutive-sequence --- longest-consecutive-sequence/sooooo-an.ts | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 longest-consecutive-sequence/sooooo-an.ts diff --git a/longest-consecutive-sequence/sooooo-an.ts b/longest-consecutive-sequence/sooooo-an.ts new file mode 100644 index 000000000..c71a1936c --- /dev/null +++ b/longest-consecutive-sequence/sooooo-an.ts @@ -0,0 +1,24 @@ +function longestConsecutive(nums: number[]): number { + if (!nums.length) return 0; + + nums.sort((a, b) => a - b); + let longest = 1; + let currentStreak = 1; + + for (let i = 1; i < nums.length; i++) { + if (nums[i] === nums[i - 1]) continue; + if (nums[i] === nums[i - 1] + 1) { + currentStreak++; + } else { + longest = Math.max(longest, currentStreak); + currentStreak = 1; + } + } + + return Math.max(longest, currentStreak); +} + +/** + * * Runtime: 37ms / 74.15% + * * Memory: 67.88MB / 93.54% + */ From 2d73efd3d46a5044a15b8b2e507dc207b04263f2 Mon Sep 17 00:00:00 2001 From: sooooo-an Date: Sat, 26 Jul 2025 11:48:08 +0900 Subject: [PATCH 5/5] Refactor two-sum --- two-sum/sooooo-an.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/two-sum/sooooo-an.ts b/two-sum/sooooo-an.ts index 974ec619c..fe6e3c82d 100644 --- a/two-sum/sooooo-an.ts +++ b/two-sum/sooooo-an.ts @@ -1,14 +1,17 @@ function twoSum(nums: number[], target: number): number[] { + const visited: { [key: string]: boolean } = {}; for (let i = 0; i < nums.length; i++) { - for (let j = i + 1; j < nums.length; j++) { - if (nums[i] + nums[j] === target) { - return [i, j]; - } + const complement = target - nums[i]; + if (visited[complement]) { + const complementIdx = nums.indexOf(complement); + return [i, complementIdx]; } + visited[nums[i]] = true; } + return []; } /** - * runtime: 30ms / Beats 38.67% - * memory 56.56MB / Beats 63.38% + * runtime: O(n) + * memory O(n) */