diff --git a/contains-duplicate/gwbaik9717.js b/contains-duplicate/gwbaik9717.js new file mode 100644 index 000000000..deeb8c753 --- /dev/null +++ b/contains-duplicate/gwbaik9717.js @@ -0,0 +1,12 @@ +// Time complexity: O(n) +// Space complexity: O(n) + +/** + * @param {number[]} nums + * @return {boolean} + */ +var containsDuplicate = function (nums) { + const set = new Set(nums); + + return set.size !== nums.length; +}; diff --git a/house-robber/gwbaik9717.js b/house-robber/gwbaik9717.js new file mode 100644 index 000000000..e54c9c2e9 --- /dev/null +++ b/house-robber/gwbaik9717.js @@ -0,0 +1,18 @@ +// Time complexity: O(n) +// Space complexity: O(n) + +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + const n = nums.length; + const dp = Array.from({ length: n + 1 }, () => 0); + dp[1] = nums[0]; + + for (let i = 2; i < n + 1; i++) { + dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]); + } + + return dp.at(-1); +}; diff --git a/longest-consecutive-sequence/gwbaik9717.js b/longest-consecutive-sequence/gwbaik9717.js new file mode 100644 index 000000000..0835fba7e --- /dev/null +++ b/longest-consecutive-sequence/gwbaik9717.js @@ -0,0 +1,30 @@ +// Time complexity: O(n) +// Space complexity: O(n) + +/** + * @param {number[]} nums + * @return {number} + */ +var longestConsecutive = function (nums) { + let answer = 0; + const consecutiveDict = new Map(); + + for (const num of nums) { + consecutiveDict.set(num, true); + } + + for (const num of nums) { + if (consecutiveDict.has(num - 1)) { + continue; + } + + let length = 1; + while (consecutiveDict.has(num + length)) { + length++; + } + + answer = Math.max(answer, length); + } + + return answer; +}; diff --git a/top-k-frequent-elements/gwbaik9717.js b/top-k-frequent-elements/gwbaik9717.js new file mode 100644 index 000000000..a539d1198 --- /dev/null +++ b/top-k-frequent-elements/gwbaik9717.js @@ -0,0 +1,24 @@ +// Time complexity: O(nlogn) +// Space complexity: O(n) + +/** + * @param {number[]} nums + * @param {number} k + * @return {number[]} + */ +var topKFrequent = function (nums, k) { + const frequencyDict = new Map(); + + for (const num of nums) { + if (frequencyDict.has(num)) { + frequencyDict.set(num, frequencyDict.get(num) + 1); + } else { + frequencyDict.set(num, 1); + } + } + + const entries = [...frequencyDict.entries()]; + entries.sort((a, b) => b[1] - a[1]); + + return entries.slice(0, k).map((entry) => entry[0]); +}; diff --git a/valid-palindrome/gwbaik9717.js b/valid-palindrome/gwbaik9717.js new file mode 100644 index 000000000..4e2ac5871 --- /dev/null +++ b/valid-palindrome/gwbaik9717.js @@ -0,0 +1,13 @@ +// Time complexity: O(n) +// Space complexity: O(n) + +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + const normalized = s.toLowerCase().replace(/[^a-z0-9]/g, ""); + const reversed = normalized.split("").reverse().join(""); + + return normalized === reversed; +};