diff --git a/contains-duplicate/parkhojeong.cpp b/contains-duplicate/parkhojeong.cpp new file mode 100644 index 0000000000..7e035cb0a0 --- /dev/null +++ b/contains-duplicate/parkhojeong.cpp @@ -0,0 +1,17 @@ +// Time Complexity: O(n) on average +// Space Complexity: O(n) + +#include + +class Solution { +public: + bool containsDuplicate(vector& nums) { + unordered_set seen; + for(int n: nums) { + if(seen.count(n)) return true; + seen.insert(n); + } + + return false; + } +}; diff --git a/house-robber/parkhojeong.cpp b/house-robber/parkhojeong.cpp new file mode 100644 index 0000000000..849e32b5fd --- /dev/null +++ b/house-robber/parkhojeong.cpp @@ -0,0 +1,23 @@ +// Time Complexity: O(n) +// Space Complexity: O(n), including memoization and recursion stack + +class Solution { +public: + + int rob(vector& nums) { + int N = nums.size(); + vector cache(N, -1); + + function recur = [&](int cur) -> int { + if (cur >= N) return 0; + if (cache[cur] != -1) return cache[cur]; + + int a = recur(cur + 1); + int b = recur(cur + 2) + nums[cur]; + + return cache[cur] = max(a, b); + }; + + return recur(0); + } +}; diff --git a/longest-consecutive-sequence/parkhojeong.cpp b/longest-consecutive-sequence/parkhojeong.cpp new file mode 100644 index 0000000000..1a8e753fce --- /dev/null +++ b/longest-consecutive-sequence/parkhojeong.cpp @@ -0,0 +1,20 @@ +// Time Complexity: O(n) on average +// Space Complexity: O(n) + +class Solution { +public: + int longestConsecutive(vector& nums) { + int N = nums.size(); + unordered_set s(nums.begin(), nums.end()); + int best = 0; + for(int x: s) { + if(s.count(x - 1)) continue; + + int len = 1; + while(s.count(x + len)) len++; + best = max(best, len); + } + + return best; + } +}; diff --git a/top-k-frequent-elements/parkhojeong.cpp b/top-k-frequent-elements/parkhojeong.cpp new file mode 100644 index 0000000000..3a8a706498 --- /dev/null +++ b/top-k-frequent-elements/parkhojeong.cpp @@ -0,0 +1,22 @@ +// Time Complexity: O(n) on average +// Space Complexity: O(n) + +#include + +class Solution { +public: + vector topKFrequent(vector& nums, int k) { + unordered_map freq; + for(int n: nums) freq[n]++; + + vector> bucket(nums.size() + 1); + for (auto& [num, f]: freq) bucket[f].push_back(num); + + + vector res; + for (int f = nums.size(); f >= 1 && res.size() < k; f--) + for (int n: bucket[f]) res.push_back(n); + + return res; + } +}; diff --git a/two-sum/parkhojeong.cpp b/two-sum/parkhojeong.cpp new file mode 100644 index 0000000000..ffdf19e896 --- /dev/null +++ b/two-sum/parkhojeong.cpp @@ -0,0 +1,21 @@ +// Time Complexity: O(n) on average +// Space Complexity: O(n) + +#include + +class Solution { +public: + vector twoSum(vector& nums, int target) { + unordered_map index_of; + + for (int i = 0; i < nums.size(); i++) { + int complement = target - nums[i]; + + if (index_of.count(complement)) { + return {index_of[complement], i}; + } + index_of[nums[i]] = i; + } + return {}; + } +};