File tree Expand file tree Collapse file tree 4 files changed +141
-0
lines changed Expand file tree Collapse file tree 4 files changed +141
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change 1
1
vector<int > rightSideView (TreeNode* root) {
2
+ if (root == nullptr )
3
+ return {};
4
+ deque<TreeNode*> dq;
5
+ dq.push_back (root);
6
+ int len = 1 ;
2
7
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;
3
25
}
You can’t perform that action at this time.
0 commit comments