Skip to content

Commit fac6215

Browse files
authored
Merge pull request #359 from heozeop/main
[crispy] week 2 solution
2 parents 19e7562 + c5bb52f commit fac6215

File tree

5 files changed

+180
-0
lines changed

5 files changed

+180
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Time Complexity: O(n^2)
2+
// Spatial Complexity: O(n)
3+
4+
class Solution {
5+
private:
6+
int findIndex(int targetVal, vector<int>& inorder) {
7+
auto pos = find(inorder.begin(), inorder.end(), targetVal);
8+
if (pos == inorder.end()) {
9+
return -1;
10+
}
11+
12+
return pos - inorder.begin();
13+
}
14+
15+
TreeNode* dfs(vector<int>& preorder, vector<int>& inorder, int preorderIndex, int startIndex, int endIndex) {
16+
if (preorder.size() <= preorderIndex || startIndex > endIndex) {
17+
return nullptr;
18+
}
19+
20+
int targetValue = preorder[preorderIndex];
21+
int rootIndex = this->findIndex(targetValue, inorder);
22+
if(rootIndex < 0) {
23+
return nullptr;
24+
}
25+
26+
int leftSubtreeLength = rootIndex - startIndex;
27+
28+
TreeNode* left = dfs(preorder, inorder, preorderIndex + 1, startIndex, rootIndex - 1);
29+
TreeNode* right = dfs(preorder, inorder, preorderIndex + 1 + leftSubtreeLength, rootIndex + 1, endIndex);
30+
31+
return new TreeNode(targetValue, left, right);
32+
}
33+
public:
34+
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
35+
return this->dfs(preorder, inorder, 0, 0, preorder.size() - 1);
36+
}
37+
};

counting-bits/heozeop.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Time Complexity: O(nlogn)
2+
// Spatial Complexity: O(n)
3+
4+
class Solution {
5+
private:
6+
int count1(int n) {
7+
int ans = 0;
8+
9+
while(n) {
10+
if (n % 2) {
11+
++ans;
12+
}
13+
14+
n /= 2;
15+
}
16+
17+
return ans;
18+
}
19+
20+
public:
21+
vector<int> countBits(int n) {
22+
vector<int> ans(n + 1);
23+
24+
for(int i = 0; i <= n; ++i) {
25+
ans[i] = this->count1(i);
26+
}
27+
28+
return ans;
29+
}
30+
};
31+

decode-ways/heozeop.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Time Complexity: O(n)
2+
// Spatial Complexity: O(n)
3+
4+
class Solution {
5+
public:
6+
int numDecodings(string s) {
7+
if(s.length() < 1 || s[0] == '0') {
8+
return 0;
9+
}
10+
11+
vector<int> dp(s.length() + 1, 0);
12+
dp[0] = dp[1] = 1;
13+
if(s[1] == '0') {
14+
dp[1] = 0;
15+
}
16+
17+
int prev,pprev;
18+
for(int i = 2; i <= s.length(); ++i) {
19+
prev = s[i - 1] - '0';
20+
if (prev <= 9 && prev > 0) {
21+
dp[i] += dp[i-1];
22+
}
23+
pprev = (s[i - 2] - '0') * 10 + prev;
24+
if(pprev <= 26 && pprev > 9) {
25+
dp[i] += dp[i-2];
26+
}
27+
}
28+
29+
return dp[s.length()];
30+
}
31+
};

encode-and-decode-strings/heozeop.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Time Complexity: O(n)
2+
// Spatial Complexity: O(n)
3+
4+
class Codec {
5+
private:
6+
string genereateRandomString(size_t size) {
7+
string randomString = "";
8+
for(size_t i = 0; i < size; ++i) {
9+
randomString += static_cast<char>(rand() % 256);
10+
}
11+
12+
return randomString;
13+
}
14+
15+
vector<string> split(string target, string delimiter) {
16+
vector<string> ans;
17+
18+
int delimiterLength = delimiter.size();
19+
size_t pos = target.find(delimiter);
20+
while(pos != string::npos) {
21+
ans.push_back(target.substr(0, pos));
22+
23+
target = target.substr(pos + delimiterLength, target.size());
24+
pos = target.find(delimiter);
25+
}
26+
ans.push_back(target);
27+
28+
return ans;
29+
}
30+
31+
string delimiter = this->genereateRandomString(10);
32+
33+
public:
34+
35+
// Encodes a list of strings to a single string.
36+
string encode(vector<string>& strs) {
37+
string encodedString = strs[0];
38+
39+
for(int i = 1; i < strs.size(); ++i) {
40+
encodedString += this->delimiter + strs[i];
41+
}
42+
43+
return encodedString;
44+
}
45+
46+
// Decodes a single string to a list of strings.
47+
vector<string> decode(string s) {
48+
49+
return split(s, this->delimiter);
50+
}
51+
};
52+
53+
// Your Codec object will be instantiated and called as such:
54+
// Codec codec;
55+
// codec.decode(codec.encode(strs));

valid-anagram/heozeop.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Time Complexity: O(n)
2+
// Spatial Complexity: O(1)
3+
4+
class Solution {
5+
public:
6+
bool isAnagram(string s, string t) {
7+
int numberOfAlphabet[26];
8+
9+
for(char character : s) {
10+
numberOfAlphabet[character - 'a']++;
11+
}
12+
13+
for(char character : t) {
14+
numberOfAlphabet[character - 'a']--;
15+
}
16+
17+
for(int i = 0; i < 26; ++i) {
18+
if (numberOfAlphabet[i] != 0) {
19+
return false;
20+
}
21+
}
22+
23+
return true;
24+
}
25+
};
26+

0 commit comments

Comments
 (0)