diff --git a/contains-duplicate/yuhyeon99.js b/contains-duplicate/yuhyeon99.js new file mode 100644 index 0000000000..19d3603784 --- /dev/null +++ b/contains-duplicate/yuhyeon99.js @@ -0,0 +1,12 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ +var containsDuplicate = function(nums) { + let numsSet = new Set(); + for(let i = 0; i < nums.length; i ++) { + if(numsSet.has(nums[i])) return true; + numsSet.add(nums[i]) + } + return false; +}; diff --git a/house-robber/yuhyeon99.js b/house-robber/yuhyeon99.js new file mode 100644 index 0000000000..2165fcc428 --- /dev/null +++ b/house-robber/yuhyeon99.js @@ -0,0 +1,19 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function(nums) { + const memo = {}; + + function dfs(start) { + if(memo[start] !== undefined) return memo[start]; + if(start >= nums.length) { + memo[start] = 0; + } else { + memo[start] = Math.max(nums[start] + dfs(start + 2), dfs(start + 1)) + } + return memo[start]; + } + + return dfs(0); +}; diff --git a/longest-consecutive-sequence/yuhyeon99.js b/longest-consecutive-sequence/yuhyeon99.js new file mode 100644 index 0000000000..c0fed7079e --- /dev/null +++ b/longest-consecutive-sequence/yuhyeon99.js @@ -0,0 +1,25 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function(nums) { + if(!nums.length) return 0; + + nums.sort((a, b) => a - b); + var answer = 0; + var length = 1; + for(let i = 0; i < nums.length - 1; i ++) { + if(nums[i] === nums[i + 1]) { + continue; + } else if (nums[i] + 1 === nums[i + 1]) { + length ++; + } else { + answer = Math.max(length, answer); + length = 1; + } + } + + answer = Math.max(length, answer); + + return answer; +}; diff --git a/top-k-frequent-elements/yuhyeon99.js b/top-k-frequent-elements/yuhyeon99.js new file mode 100644 index 0000000000..f21a9691be --- /dev/null +++ b/top-k-frequent-elements/yuhyeon99.js @@ -0,0 +1,21 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ +var topKFrequent = function(nums, k) { + var dict = {}; + var sortTable = []; + for(let i = 0; i < nums.length; i ++) { + dict[nums[i]] = dict[nums[i]] ? dict[nums[i]] + 1 : 1; + } + + for(let ele in dict) { + sortTable.push([ele, dict[ele]]); + } + sortTable.sort((a, b) => { + return b[1] - a[1]; + }); + + return sortTable.slice(0, k).map(e => Number(e[0])) +}; diff --git a/two-sum/yuhyeon99.js b/two-sum/yuhyeon99.js new file mode 100644 index 0000000000..9fd5413bd6 --- /dev/null +++ b/two-sum/yuhyeon99.js @@ -0,0 +1,35 @@ +/** + * 정수 배열 두 숫자를 합쳐서 target의 값이 나오게 해야함 + * 해당하는 인덱스를 길이가 2인 배열로 반환하시오. + * 각 정수는 한 번씩만 쓸 수 있음. + * + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function(nums, target) { + const numsMap = new Map(); + + nums.forEach((num, i) => { + if(!numsMap.has(num)) numsMap.set(num, []); + numsMap.get(num).push(i); + }); + + for(let i = 0; i < nums.length; i ++) { + for(let j = i + 1; j < nums.length; j ++) { + if(nums[i] + nums[j] === target) { + if(hasMultipleEntries(numsMap.get(nums[i]))) { + return [...numsMap.get(nums[i]).slice(0,2)]; + } else { + return [...numsMap.get(nums[i]), ...numsMap.get(nums[j])]; + } + } + } + } + + return; +}; + +function hasMultipleEntries(arr) { + return arr.length >= 2; +}