diff --git a/contains-duplicate/byol-han.js b/contains-duplicate/byol-han.js new file mode 100644 index 000000000..62a06e156 --- /dev/null +++ b/contains-duplicate/byol-han.js @@ -0,0 +1,9 @@ +// Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct. +/** + * @param {number[]} nums + * @return {boolean} + */ +var containsDuplicate = function (nums) { + const uniqueSet = new Set(nums); + return uniqueSet.size !== nums.length; +}; diff --git a/house-robber/byol-han.js b/house-robber/byol-han.js new file mode 100644 index 000000000..b41c87545 --- /dev/null +++ b/house-robber/byol-han.js @@ -0,0 +1,17 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + if (nums.length === 0) return 0; + if (nums.length === 1) return nums[0]; + + let dp = []; + dp[0] = nums[0]; + dp[1] = Math.max(nums[0], nums[1]); + + for (let i = 2; i < nums.length; i++) { + dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]); + } + return dp[nums.length - 1]; +}; diff --git a/longest-consecutive-sequence/byol-han.js b/longest-consecutive-sequence/byol-han.js new file mode 100644 index 000000000..5334def44 --- /dev/null +++ b/longest-consecutive-sequence/byol-han.js @@ -0,0 +1,23 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function (nums) { + if (nums.length === 0) return nums.length; + + const setNums = new Set(nums); + const sortNums = [...setNums].sort((a, b) => a - b); + + let longest = 1; + let currentlength = 1; + + for (let i = 0; i < sortNums.length; i++) { + if (sortNums[i] + 1 === sortNums[i + 1]) { + currentlength++; + longest = Math.max(longest, currentlength); + } else { + currentlength = 1; + } + } + return longest; +}; diff --git a/top-k-frequent-elements/byol-han.js b/top-k-frequent-elements/byol-han.js new file mode 100644 index 000000000..eaecc5dab --- /dev/null +++ b/top-k-frequent-elements/byol-han.js @@ -0,0 +1,21 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ +var topKFrequent = function (nums, k) { + const freqMap = new Map(); + + // 빈도수 계산 + for (const num of nums) { + freqMap.set(num, (freqMap.get(num) || 0) + 1); + } + + // Min Heap을 사용해서 상위 k개만 유지 + return Array.from(freqMap.entries()) // [ [num, count], [num, count], ... ] + .sort((a, b) => b[1] - a[1]) // 빈도수를 기준으로 내림차순 정렬 + .slice(0, k) // 상위 k개 선택 + .map((entry) => entry[0]); // 숫자만 추출 + + return result; +}; diff --git a/two-sum/byol-han.js b/two-sum/byol-han.js new file mode 100644 index 000000000..46c92bb36 --- /dev/null +++ b/two-sum/byol-han.js @@ -0,0 +1,22 @@ +// Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. + +// You may assume that each input would have exactly one solution, and you may not use the same element twice. + +// You can return the answer in any order. + +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function (nums, target) { + let result = []; + 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]; + } + } + } + return result; +};