Skip to content

Commit f00cfe4

Browse files
authored
Merge branch 'DaleStudy:main' into main
2 parents 609212c + 7a49bf6 commit f00cfe4

File tree

5 files changed

+173
-0
lines changed

5 files changed

+173
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> levelOrder(TreeNode* root) {
4+
vector<vector<int>> result;
5+
6+
if(!root)
7+
return result;
8+
9+
queue<TreeNode*> q;
10+
11+
q.push(root);
12+
13+
while(!q.empty()){
14+
int len = q.size();
15+
vector<int> level;
16+
17+
for(int i = 0; i < len; i++){
18+
TreeNode* curr = q.front();
19+
q.pop();
20+
21+
if(curr->left)
22+
q.push(curr->left);
23+
24+
if(curr->right)
25+
q.push(curr->right);
26+
27+
level.push_back(curr->val);
28+
}
29+
30+
result.push_back(level);
31+
}
32+
33+
return result;
34+
}
35+
};

counting-bits/PDKhan.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public:
3+
vector<int> countBits(int n) {
4+
vector<int> result(n + 1, 0);
5+
6+
for(int i = 0; i <= n; i++){
7+
result[i] = result[i >> 1] + (i & 1);
8+
}
9+
10+
return result;
11+
}
12+
};

house-robber-ii/PDKhan.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public:
3+
int robsearch(vector<int>& nums, int start, int end) {
4+
int prev = 0;
5+
int prevprev = 0;
6+
7+
for(int i = start; i <= end; i++){
8+
int curr = max(prev, nums[i] + prevprev);
9+
10+
prevprev = prev;
11+
prev = curr;
12+
}
13+
14+
return prev;
15+
}
16+
17+
int rob(vector<int>& nums) {
18+
int len = nums.size();
19+
20+
if(len == 0)
21+
return 0;
22+
if(len == 1)
23+
return nums[0];
24+
25+
return max(robsearch(nums, 0, len - 2), robsearch(nums, 1, len - 1));
26+
}
27+
};

meeting-rooms-ii/PDKhan.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Solution {
2+
public:
3+
/**
4+
* @param intervals: an array of meeting time intervals
5+
* @return: the minimum number of conference rooms required
6+
*/
7+
int minMeetingRooms(vector<Interval> &intervals) {
8+
// Write your code here
9+
if(intervals.empty())
10+
return 0;
11+
12+
vector<int> starts, ends;
13+
14+
for(int i = 0; i < intervals.size(); i++){
15+
starts.push_back(intervals[i].start);
16+
ends.push_back(intervals[i].end);
17+
}
18+
19+
sort(starts.begin(), starts.end());
20+
sort(ends.begin(), ends.end());
21+
22+
int result = 0;
23+
int endpos = 0;
24+
25+
for(int i = 0; i < starts.size(); i++){
26+
if(starts[i] < ends[endpos])
27+
result++;
28+
else
29+
endpos++;
30+
}
31+
32+
return result;
33+
}
34+
};

word-search-ii/PDKhan.cpp

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
class TrieNode{
2+
public:
3+
TrieNode* children[26] = {};
4+
string word = "";
5+
};
6+
7+
class Solution {
8+
public:
9+
void insert(TrieNode* root, const string& word){
10+
TrieNode* node = root;
11+
12+
for(int i = 0; i < word.length(); i++){
13+
int idx = word[i] - 'a';
14+
15+
if(!node->children[idx])
16+
node->children[idx] = new TrieNode();
17+
18+
node = node->children[idx];
19+
}
20+
node->word = word;
21+
}
22+
23+
void dfs(int r, int c, vector<vector<char>>& board, TrieNode* root, vector<string>& result){
24+
if(r < 0 || r >= board.size() || c < 0 || c >= board[r].size())
25+
return;
26+
27+
char ch = board[r][c];
28+
29+
if(ch == '#' || !root->children[ch - 'a'])
30+
return;
31+
32+
root = root->children[ch - 'a'];
33+
34+
if(!root->word.empty()){
35+
result.push_back(root->word);
36+
root->word.clear();
37+
}
38+
39+
board[r][c] = '#';
40+
41+
dfs(r - 1, c, board, root, result);
42+
dfs(r + 1, c, board, root, result);
43+
dfs(r, c - 1, board, root, result);
44+
dfs(r, c + 1, board, root, result);
45+
46+
board[r][c] = ch;
47+
}
48+
49+
vector<string> findWords(vector<vector<char>>& board, vector<string>& words) {
50+
TrieNode* root = new TrieNode();
51+
52+
for(int i = 0; i < words.size(); i++)
53+
insert(root, words[i]);
54+
55+
vector<string> result;
56+
57+
for(int i = 0; i < board.size(); i++){
58+
for(int j = 0; j < board[i].size(); j++){
59+
dfs(i, j, board, root, result);
60+
}
61+
}
62+
63+
return result;
64+
}
65+
};

0 commit comments

Comments
 (0)