Skip to content

Commit e6f47f7

Browse files
committed
4 problems solved.
1 parent 3b016bf commit e6f47f7

File tree

4 files changed

+141
-0
lines changed

4 files changed

+141
-0
lines changed

src/1047.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
string removeDuplicates(string S) {
2+
int len = S.size();
3+
if (len == 1)
4+
return S;
5+
string res;
6+
stack<char> stk;
7+
for (int i = 0; i < len; ++i)
8+
{
9+
if (stk.empty())
10+
stk.push(S[i]);
11+
else
12+
{
13+
if (stk.top() == S[i])
14+
stk.pop();
15+
else
16+
stk.push(S[i]);
17+
}
18+
}
19+
20+
while (!stk.empty())
21+
{
22+
res.push_back(stk.top());
23+
stk.pop();
24+
}
25+
26+
reverse(res.begin(), res.end());
27+
return res;
28+
}

src/1341.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
vector<int> kWeakestRows(vector<vector<int>>& mat, int k) {
2+
int row = mat.size();
3+
if (row == 1)
4+
return {0};
5+
int col = mat[0].size();
6+
7+
struct Elem
8+
{
9+
int num;
10+
int index;
11+
Elem(int n = 0, int id = -1):num(n),index(id){}
12+
};
13+
auto cmp = [](const Elem& a, const Elem& b){
14+
return a.num < b.num || (a.num == b.num && a.index < b.index);
15+
};
16+
17+
vector<Elem> vec(row, Elem());
18+
for (int i = 0; i < row; ++i)
19+
{
20+
vec[i].num = mat[i].rend() - upper_bound(mat[i].rbegin(), mat[i].rend(), 0);
21+
vec[i].index = i;
22+
}
23+
24+
sort(vec.begin(), vec.end(), cmp);
25+
vector<int> res(k, -1);
26+
for (int i = 0; i < k; ++i)
27+
res[i] = vec[i].index;
28+
29+
return res;
30+
}

src/145.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
vector<int> postorderTraversal(TreeNode* root) {
2+
vector<int> res;
3+
if (root == nullptr)
4+
return res;
5+
6+
deque<TreeNode*> dq;
7+
deque<int> flag;
8+
9+
dq.push_back(root);
10+
flag.push_back(0);
11+
12+
while (!dq.empty())
13+
{
14+
TreeNode* node = dq.back();
15+
int status = flag.back();
16+
if (status == 0)
17+
{
18+
if (node->left != nullptr)
19+
{
20+
flag.back() = 1;
21+
dq.push_back(node->left);
22+
flag.push_back(0);
23+
}
24+
else if (node->right != nullptr)
25+
{
26+
flag.back() = 2;
27+
dq.push_back(node->right);
28+
flag.push_back(0);
29+
}
30+
else
31+
{
32+
res.push_back(node->val);
33+
dq.pop_back();
34+
flag.pop_back();
35+
}
36+
}
37+
else if (status == 1)
38+
{
39+
if (node->right != nullptr)
40+
{
41+
flag.back() = 2;
42+
dq.push_back(node->right);
43+
flag.push_back(0);
44+
}
45+
else
46+
{
47+
res.push_back(node->val);
48+
dq.pop_back();
49+
flag.pop_back();
50+
}
51+
}
52+
else
53+
{
54+
res.push_back(node->val);
55+
dq.pop_back();
56+
flag.pop_back();
57+
}
58+
}
59+
60+
return res;
61+
}

src/199.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,25 @@
11
vector<int> rightSideView(TreeNode* root) {
2+
if (root == nullptr)
3+
return {};
4+
deque<TreeNode*> dq;
5+
dq.push_back(root);
6+
int len = 1;
27

8+
vector<int> res;
9+
while (len > 0)
10+
{
11+
for (int i = 0; i < len; ++i)
12+
{
13+
TreeNode* node = dq[i];
14+
if (node->left != nullptr)
15+
dq.push_back(node->left);
16+
if (node->right != nullptr)
17+
dq.push_back(node->right);
18+
}
19+
res.push_back(dq[len-1]->val);
20+
dq.erase(dq.begin(), dq.begin()+len);
21+
len = dq.size();
22+
}
23+
24+
return res;
325
}

0 commit comments

Comments
 (0)