From f56e213406973b09fbdaa93c7be773dbf04c7f89 Mon Sep 17 00:00:00 2001 From: jeehay Date: Thu, 5 Dec 2024 23:51:43 +0900 Subject: [PATCH 1/7] contains-duplicate solution --- contains-duplicate/Jeehay28.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 contains-duplicate/Jeehay28.js diff --git a/contains-duplicate/Jeehay28.js b/contains-duplicate/Jeehay28.js new file mode 100644 index 000000000..fcfb8589d --- /dev/null +++ b/contains-duplicate/Jeehay28.js @@ -0,0 +1,7 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ +var containsDuplicate = function (nums) { + return nums.length !== new Set(nums).size; +}; From 4a49e74ec68f074e34dcb81e2b955bbc08a1cca9 Mon Sep 17 00:00:00 2001 From: jeehay Date: Thu, 5 Dec 2024 23:54:24 +0900 Subject: [PATCH 2/7] valid-palindrome solution --- valid-palindrome/Jeehay28.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 valid-palindrome/Jeehay28.js diff --git a/valid-palindrome/Jeehay28.js b/valid-palindrome/Jeehay28.js new file mode 100644 index 000000000..3652e8a5f --- /dev/null +++ b/valid-palindrome/Jeehay28.js @@ -0,0 +1,17 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + const reg = /[a-z0-9]/g; + const converted = s.toLowerCase().match(reg); + + if (converted === null) { + return true; + } else { + const forward = converted.join(""); + const backward = converted.reverse().join(""); + + return forward === backward; + } +}; From 15c9c082ff0a723b997534b4e446d7dd2de02130 Mon Sep 17 00:00:00 2001 From: jeehay Date: Fri, 6 Dec 2024 01:07:11 +0900 Subject: [PATCH 3/7] top-k-frequent-elements solution --- top-k-frequent-elements/Jeehay28.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 top-k-frequent-elements/Jeehay28.js diff --git a/top-k-frequent-elements/Jeehay28.js b/top-k-frequent-elements/Jeehay28.js new file mode 100644 index 000000000..b127890ef --- /dev/null +++ b/top-k-frequent-elements/Jeehay28.js @@ -0,0 +1,25 @@ +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ +var topKFrequent = function (nums, k) { + let result = []; + + const obj = nums.reduce((acc, cur) => { + acc[cur] = (acc[cur] || 0) + 1; + return acc; + }, {}); + + const frequentValues = Object.values(obj) + .sort((a, b) => b - a) + .slice(0, k); + + for (const [key, value] of Object.entries(obj)) { + if (frequentValues.includes(value)) { + result.push(parseInt(key)); + } + } + + return result; +}; From 2e0a8fe3a62713a33c0725883ce770cbe7bcad04 Mon Sep 17 00:00:00 2001 From: jeehay Date: Mon, 9 Dec 2024 23:34:32 +0900 Subject: [PATCH 4/7] longest-consecutive-sequence solution --- longest-consecutive-sequence/Jeehay28.js | 31 ++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 longest-consecutive-sequence/Jeehay28.js diff --git a/longest-consecutive-sequence/Jeehay28.js b/longest-consecutive-sequence/Jeehay28.js new file mode 100644 index 000000000..f1f92ecf4 --- /dev/null +++ b/longest-consecutive-sequence/Jeehay28.js @@ -0,0 +1,31 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function (nums) { + let result = []; + let longest = []; + + numsSorted = nums.sort((a, b) => a - b); + + numsFiltered = [...new Set(numsSorted)]; + + for (let i = 0; i < numsFiltered.length; i++) { + if (result.length === 0) { + result.push(numsFiltered[i]); + } else if (result.length >= 1) { + if (numsFiltered[i] === result[result.length - 1] + 1) { + result.push(numsFiltered[i]); + } else { + longest.push(result.length); + result = [numsFiltered[i]]; + } + } + } + + if (longest.length === 0) { + return result.length; + } else { + return Math.max(Math.max(...longest), result.length); + } +}; From 45a049d2566ad7411bc2c246aa36488cbd5d1243 Mon Sep 17 00:00:00 2001 From: jeehay Date: Sun, 15 Dec 2024 17:29:26 +0900 Subject: [PATCH 5/7] Add valid-anagram solution --- valid-anagram/Jeehay28.js | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 valid-anagram/Jeehay28.js diff --git a/valid-anagram/Jeehay28.js b/valid-anagram/Jeehay28.js new file mode 100644 index 000000000..1ad1776b7 --- /dev/null +++ b/valid-anagram/Jeehay28.js @@ -0,0 +1,55 @@ +/** + * @param {string} s + * @param {string} t + * @return {boolean} + */ + +// 시간 복잡도: O(n) +// 공간 복잡도: O(n) + +var isAnagram = function (s, t) { + + if (s.length !== t.length) { + return false; + } + + let obj = {}; + + for (let k of s) { + obj[k] = (obj[k] || 0) + 1; + + } + + for (let k of t) { + if (obj[k] === undefined || obj[k] === 0) { + return false; + } + obj[k]--; + } + + return true; + +}; + +// 시간 복잡도: O(n log n) +// 공간 복잡도: O(n) + +// var isAnagram = function (s, t) { + +// if (s.length !== t.length) { +// return false; +// } + +// let sArr = s.split("").sort(); +// let tArr = t.split("").sort(); + +// for (let i = 0; i < sArr.length; i++) { +// if (sArr[i] !== tArr[i]) { +// return false; +// } +// } + +// return true; + +// }; + From 92dd60591c5576944269ef0a6a33c3bfc8498d33 Mon Sep 17 00:00:00 2001 From: jeehay Date: Sun, 15 Dec 2024 17:33:22 +0900 Subject: [PATCH 6/7] Revert "Add valid-anagram solution" This reverts commit 45a049d2566ad7411bc2c246aa36488cbd5d1243. --- valid-anagram/Jeehay28.js | 55 --------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 valid-anagram/Jeehay28.js diff --git a/valid-anagram/Jeehay28.js b/valid-anagram/Jeehay28.js deleted file mode 100644 index 1ad1776b7..000000000 --- a/valid-anagram/Jeehay28.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @param {string} s - * @param {string} t - * @return {boolean} - */ - -// 시간 복잡도: O(n) -// 공간 복잡도: O(n) - -var isAnagram = function (s, t) { - - if (s.length !== t.length) { - return false; - } - - let obj = {}; - - for (let k of s) { - obj[k] = (obj[k] || 0) + 1; - - } - - for (let k of t) { - if (obj[k] === undefined || obj[k] === 0) { - return false; - } - obj[k]--; - } - - return true; - -}; - -// 시간 복잡도: O(n log n) -// 공간 복잡도: O(n) - -// var isAnagram = function (s, t) { - -// if (s.length !== t.length) { -// return false; -// } - -// let sArr = s.split("").sort(); -// let tArr = t.split("").sort(); - -// for (let i = 0; i < sArr.length; i++) { -// if (sArr[i] !== tArr[i]) { -// return false; -// } -// } - -// return true; - -// }; - From f5ef578c9e8fd07393a625b50449593800f9ef67 Mon Sep 17 00:00:00 2001 From: jeehay Date: Sun, 15 Dec 2024 17:38:24 +0900 Subject: [PATCH 7/7] Add house-robber solution --- house-robber/Jeehay28.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 house-robber/Jeehay28.js diff --git a/house-robber/Jeehay28.js b/house-robber/Jeehay28.js new file mode 100644 index 000000000..6fc9d239c --- /dev/null +++ b/house-robber/Jeehay28.js @@ -0,0 +1,36 @@ +/** + * @param {number[]} nums + * @return {number} + */ + +// Bottom-Up DP (with constant space) 방식 + +// 시간 복잡도 (Time Complexity) +// O(n) — 입력 배열의 크기에 비례하여 수행 시간이 증가 + +// 공간 복잡도 (Space Complexity) +// O(1) — 입력 크기에 관계없이 사용하는 메모리 공간이 일정 + + +var rob = function (nums) { + + if (nums.length === 1) { + return nums[0]; + } + + let robbed_2 = nums[0]; + let robbed_1 = Math.max(nums[0], nums[1]); + + for (let i = 2; i < nums.length; i++) { + + const temp = robbed_1; + + robbed_1 = Math.max(robbed_1, robbed_2 + nums[i]); + + robbed_2 = temp; + + } + + return robbed_1; + +};