Skip to content

Commit d455edb

Browse files
committed
4 problems solved.
1 parent ad26037 commit d455edb

File tree

4 files changed

+184
-0
lines changed

4 files changed

+184
-0
lines changed

src/1110.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
vector<TreeNode*> delNodes(TreeNode* root, vector<int>& to_delete) {
2+
vector<TreeNode*> vec;
3+
struct Elem
4+
{
5+
TreeNode* node;
6+
bool status;
7+
Elem(TreeNode* tn = nullptr, bool flag = false):node(tn), status(flag){}
8+
};
9+
10+
deque<Elem> dq;
11+
dq.push_back(Elem(root, true));
12+
13+
int index = 0, len = 1;
14+
bool flag = true;
15+
while (flag)
16+
{
17+
flag = false;
18+
int lim = len;
19+
for (int i = index; i < lim; ++i)
20+
{
21+
TreeNode* tmp = dq[i].node;
22+
if (tmp->left != nullptr)
23+
{
24+
flag = true;
25+
dq.push_back(Elem(tmp->left, true));
26+
len++;
27+
}
28+
if (tmp->right != nullptr)
29+
{
30+
flag = true;
31+
dq.push_back(Elem(tmp->right, true));
32+
len++;
33+
}
34+
}
35+
index = lim;
36+
}
37+
38+
int len1 = dq.size();
39+
int len2 = to_delete.size();
40+
map<TreeNode*, TreeNode*> mp;
41+
mp.insert(make_pair(root, nullptr));
42+
for (int i = 0; i < len1; ++i)
43+
{
44+
TreeNode* node = dq[i].node;
45+
if (node->left != nullptr)
46+
mp[node->left] = node;
47+
if (node->right != nullptr)
48+
mp[node->right] = node;
49+
}
50+
51+
for (int i = 0; i < len2; ++i)
52+
{
53+
for (int j = 0; j < len1; ++j)
54+
{
55+
if (dq[j].node->val == to_delete[i])
56+
{
57+
dq[j].status = false;
58+
if (dq[j].node->left != nullptr)
59+
mp[dq[j].node->left] = nullptr;
60+
if (dq[j].node->right != nullptr)
61+
mp[dq[j].node->right] = nullptr;
62+
}
63+
else if (dq[j].node->left != nullptr && dq[j].node->left->val == to_delete[i])
64+
dq[j].node->left = nullptr;
65+
else if (dq[j].node->right != nullptr && dq[j].node->right->val == to_delete[i])
66+
dq[j].node->right = nullptr;
67+
}
68+
}
69+
70+
for (int i = 0; i < len1; ++i)
71+
{
72+
if (dq[i].status && mp[dq[i].node] == nullptr)
73+
{
74+
vec.push_back(dq[i].node);
75+
}
76+
}
77+
78+
return vec;
79+
}

src/1325.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
TreeNode* removeLeafNodes(TreeNode* root, int target) {
2+
if (root == nullptr)
3+
return nullptr;
4+
5+
vector<stack<TreeNode*>> vec;
6+
stack<TreeNode*> stk;
7+
8+
search(root, target, stk, vec);
9+
int len = vec.size();
10+
for (int i = 0; i < len; ++i)
11+
{
12+
TreeNode* node = vec[i].top();
13+
vec[i].pop();
14+
while (!vec[i].empty())
15+
{
16+
TreeNode* par = vec[i].top();
17+
if (par->left == node)
18+
par->left = nullptr;
19+
else
20+
par->right = nullptr;
21+
delete node;
22+
if (par->val == target && par->left == nullptr && par->right == nullptr)
23+
{
24+
node = par;
25+
vec[i].pop();
26+
}
27+
else
28+
break;
29+
}
30+
if (vec[i].empty())
31+
return nullptr;
32+
}
33+
34+
return root;
35+
}
36+
37+
void search(TreeNode* node, int target, stack<TreeNode*> stk, vector<stack<TreeNode*>>& vec)
38+
{
39+
stk.push(node);
40+
if (node->val == target && node->left == nullptr && node->right == nullptr)
41+
{
42+
vec.push_back(stk);
43+
}
44+
else
45+
{
46+
if (node->left != nullptr)
47+
search(node->left, target, stk, vec);
48+
if (node->right != nullptr)
49+
search(node->right, target, stk, vec);
50+
}
51+
}

src/1338.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
int minSetSize(vector<int>& arr) {
2+
int len = arr.size();
3+
if (len == 2)
4+
return 1;
5+
6+
map<int, int> mp;
7+
for (int i = 0; i < len; ++i)
8+
{
9+
mp[arr[i]]++;
10+
}
11+
12+
int sz = mp.size();
13+
vector<int> vec(sz);
14+
int i = 0;
15+
for (auto iter = mp.begin(); iter != mp.end(); ++iter)
16+
vec[i++] = iter->second;
17+
sort(vec.begin(), vec.end());
18+
int sum = 0;
19+
int ct = 0;
20+
for (i = sz-1; i >= 0; --i)
21+
{
22+
sum += vec[i];
23+
++ct;
24+
if (sum >= len/2)
25+
break;
26+
}
27+
28+
return ct;
29+
}

src/1409.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
vector<int> processQueries(vector<int>& queries, int m) {
2+
vector<int> arr(m);
3+
for (int i = 0; i < m; ++i)
4+
arr[i] = i+1;
5+
6+
int len = queries.size();
7+
vector<int> res(len);
8+
for (int i = 0; i < len; ++i)
9+
{
10+
int j;
11+
for (j = m-1; j >= 0; --j)
12+
{
13+
if (arr[j] == queries[i])
14+
{
15+
res[i] = j;
16+
break;
17+
}
18+
}
19+
for (; j >= 1; --j)
20+
arr[j] = arr[j-1];
21+
arr[0] = queries[i];
22+
}
23+
24+
return res;
25+
}

0 commit comments

Comments
 (0)