diff --git a/contains-duplicate/reeseo3o.js b/contains-duplicate/reeseo3o.js new file mode 100644 index 000000000..b9e982549 --- /dev/null +++ b/contains-duplicate/reeseo3o.js @@ -0,0 +1,4 @@ +const containsDuplicate = (nums) => { + const uniqueCount = new Set(nums).size; + return uniqueCount !== nums.length; +}; diff --git a/top-k-frequent-elements/reeseo3o.js b/top-k-frequent-elements/reeseo3o.js new file mode 100644 index 000000000..858cd158b --- /dev/null +++ b/top-k-frequent-elements/reeseo3o.js @@ -0,0 +1,27 @@ +const topKFrequent = (nums, k) => { + // 1: 등장 횟수 세기 + const countMap = new Map(); + for (const num of nums) { + countMap.set(num, (countMap.get(num) ?? 0) + 1); + } + + // 2: 버킷 배열 만들기 + // 인덱스 = 빈도수, 값 = 그 빈도수를 가진 숫자들의 배열 + // 최대 빈도는 nums.length이므로 크기를 nums.length + 1로 설정 + const bucket = Array.from({ length: nums.length + 1 }, () => []); + + for (const [num, freq] of countMap.entries()) { + bucket[freq].push(num); + } + + // 3: 뒤(높은 빈도)에서부터 탐색하며 k개 수집 + const result = []; + for (let i = bucket.length - 1; i >= 0 && result.length < k; i--) { + for (const num of bucket[i]) { + result.push(num); + if (result.length === k) break; + } + } + + return result; +} diff --git a/two-sum/reeseo3o.js b/two-sum/reeseo3o.js new file mode 100644 index 000000000..988ac2e32 --- /dev/null +++ b/two-sum/reeseo3o.js @@ -0,0 +1,13 @@ +const twoSum = (nums, target) => { + const map = {}; + + for (let i = 0; i < nums.length; i++) { + const complement = target - nums[i]; + + if (complement in map) { + return [map[complement], i]; + } + + map[nums[i]] = i; + } +};