Skip to content

Commit

Permalink
Merge pull request #302 from obzva/main
Browse files Browse the repository at this point in the history
[Flynn] WEEK 01 Solutions
  • Loading branch information
obzva authored Aug 15, 2024
2 parents ee1ad8e + 4c50d54 commit 1f2b1c2
Show file tree
Hide file tree
Showing 5 changed files with 166 additions and 0 deletions.
24 changes: 24 additions & 0 deletions contains-duplicate/flynn.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/**
* for given size of input nums N,
*
* Time complexity: O(N)
* - iteration: O(N)
* - unorderd_set find method: O(1) on average
* - unorderd_set insert method: O(1) on average
*
* Space complexity: O(N)
*/

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> unique_numbers;

auto it = nums.begin();
while (it != nums.end()) {
if (unique_numbers.find(*it) == unique_numbers.end()) unique_numbers.insert(*(it++));
else return true;
}
return false;
}
};
41 changes: 41 additions & 0 deletions kth-smallest-element-in-a-bst/flynn.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/**
* For the height H of the given BST,
*
* Time complexity: O(max(H, K))
* - if H > K, O(H) at worst
* - else, O(K)
*
* Space complexity: O(H > K ? H + K : K)
* - additional vector to save nums O(K)
* - if H > K, call stack O(H)
* - else, O(K)
*/

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void inorder(TreeNode* node, vector<int>& v, int max_size) {
if (!node || v.size() == max_size) return;

if (node->left) inorder(node->left, v, max_size);
v.push_back(node->val);
if (node->right) inorder(node->right, v, max_size);
}

int kthSmallest(TreeNode* root, int k) {
vector<int> nums;
inorder(root, nums, k);

return nums[k - 1];
}
};
21 changes: 21 additions & 0 deletions number-of-1-bits/flynn.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/**
* For given integer N,
*
* Time complexity: O(logN)
*
* Space complexity: O(1)
*/

class Solution {
public:
int hammingWeight(int n) {
int res = 0;

while (n) {
if (n & 1) res++;
n >>= 1;
}

return res;
}
};
34 changes: 34 additions & 0 deletions palindromic-substrings/flynn.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* For the length N of given string s,
*
* Time complexity: O(N^3)
*
* Space complexity: O(1)
*/

class Solution {
public:
int countSubstrings(string s) {
int res = 0;

for (int i = 0; i < s.size(); i++) {
for (int j = i; j < s.size(); j++) {
int start = i, end = j;
bool is_palindrome = true;

while (start <= end) {
if (s[start] != s[end]) {
is_palindrome = false;
break;
}
start++;
end--;
}

if (is_palindrome) res++;
}
}

return res;
}
};
46 changes: 46 additions & 0 deletions top-k-frequent-elements/flynn.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* For given size of nums N and K,
*
* Time complexity: O(N + MlogM + KlogM) <= O(NlogN)
* - the first iteration: O(N)
* - N times of
* - unordered_map find: O(1) on average
* - unordered_map insert: O(1) on average
* - the second iteration: O(MlogM) such that M is the number of unique numbers
* - M times of
* - priority_queue push: O(logM)
* - the last iteration of making result: O(KlogM)
* - K times of
* - priority_queue pop: O(logM)
*
* Space complexity: O(N) at worst
*/

class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> res;
priority_queue<pair<int, int>> pq;
unordered_map<int, int> m;

auto nums_it = nums.begin();
while (nums_it != nums.end()) {
if (m.find(*nums_it) == m.end()) m.insert({*nums_it, 1});
else m[*nums_it]++;
nums_it++;
}

auto m_it = m.begin();
while (m_it != m.end()) {
pq.push({(*m_it).second, (*m_it).first});
m_it++;
}

while (k--) {
res.push_back(pq.top().second);
pq.pop();
}

return res;
}
};

0 comments on commit 1f2b1c2

Please sign in to comment.