File tree Expand file tree Collapse file tree 6 files changed +303
-0
lines changed Expand file tree Collapse file tree 6 files changed +303
-0
lines changed Original file line number Diff line number Diff line change
1
+ Node* connect (Node* root) {
2
+ if (root == nullptr || (root->left == nullptr && root->right == nullptr ))
3
+ return root;
4
+
5
+ doconnect (root);
6
+
7
+ return root;
8
+ }
9
+
10
+ void doconnect (Node* node)
11
+ {
12
+ if (node->left != nullptr )
13
+ {
14
+ Node* tmp = node;
15
+ Node* nd = node->left ;
16
+ while (tmp->next != nullptr )
17
+ {
18
+ nd->next = tmp->right ;
19
+ nd = tmp->next ->left ;
20
+ tmp->right ->next = nd;
21
+ tmp = tmp->next ;
22
+ }
23
+ nd->next = tmp->right ;
24
+ doconnect (node->left );
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ Node* connect (Node* root) {
2
+ if (root == nullptr || (root->left == nullptr && root->right == nullptr ))
3
+ return root;
4
+
5
+ doconnect (root);
6
+
7
+ return root;
8
+ }
9
+
10
+ void doconnect (Node* node)
11
+ {
12
+ Node* tmp = node;
13
+ Node* first = nullptr ;
14
+ while (tmp != nullptr )
15
+ {
16
+ if (tmp->left != nullptr )
17
+ {
18
+ first = tmp->left ;
19
+ break ;
20
+ }
21
+ if (tmp->right != nullptr )
22
+ {
23
+ first = tmp->right ;
24
+ break ;
25
+ }
26
+ tmp = tmp->next ;
27
+ }
28
+
29
+ if (first != nullptr )
30
+ {
31
+ Node* nd = first;
32
+ if (tmp->left == first && tmp->right != nullptr )
33
+ {
34
+ nd->next = tmp->right ;
35
+ nd = tmp->right ;
36
+ }
37
+
38
+ Node* cur = tmp->next ;
39
+ while (cur != nullptr )
40
+ {
41
+ if (cur->left != nullptr )
42
+ {
43
+ nd->next = cur->left ;
44
+ nd = cur->left ;
45
+ }
46
+ if (cur->right != nullptr )
47
+ {
48
+ nd->next = cur->right ;
49
+ nd = cur->right ;
50
+ }
51
+ cur = cur->next ;
52
+ }
53
+
54
+ doconnect (first);
55
+ }
56
+ }
Original file line number Diff line number Diff line change
1
+ bool isCovered (vector<vector<int >>& ranges, int left, int right) {
2
+ int len = ranges.size ();
3
+ if (len == 0 )
4
+ return false ;
5
+ auto cmp = [](const vector<int >& a, const vector<int >& b) {
6
+ return (a[0 ] < b[0 ] || (a[0 ]==b[0 ] && a[1 ] < b[1 ]));
7
+ };
8
+ sort (ranges.begin (), ranges.end (), cmp);
9
+
10
+ int lh = left, rh = right;
11
+ for (int i = 0 ; i < len; ++i)
12
+ {
13
+ if (lh >= ranges[i][0 ] && lh <= ranges[i][1 ])
14
+ {
15
+ if (rh <= ranges[i][1 ])
16
+ return true ;
17
+ else
18
+ lh = ranges[i][1 ]+1 ;
19
+ }
20
+ if (rh >= ranges[i][0 ] && rh <= ranges[i][1 ])
21
+ {
22
+ if (lh >= ranges[i][0 ])
23
+ return true ;
24
+ else
25
+ rh = ranges[i][0 ]-1 ;
26
+ }
27
+ }
28
+
29
+ return false ;
30
+ }
Original file line number Diff line number Diff line change
1
+ int calculate (string s) {
2
+ int len = s.size ();
3
+ int i = 0 ;
4
+ deque<char > dq;
5
+
6
+ int n = 0 ;
7
+ while (i < len)
8
+ {
9
+ if (s[i] != ' ' )
10
+ {
11
+ dq.push_back (s[i]);
12
+ ++n;
13
+ }
14
+ ++i;
15
+ }
16
+
17
+ i = 0 ;
18
+ int v = 0 ;
19
+ deque<int > number;
20
+ deque<char > op;
21
+ bool flag = false ;
22
+ while (i < n)
23
+ {
24
+ if (dq[i] >= ' 0' && dq[i] <= ' 9' )
25
+ {
26
+ v = v*10 + (dq[i]-' 0' );
27
+ ++i;
28
+ flag = true ;
29
+ }
30
+ else
31
+ {
32
+ if (dq[i] == ' +' || dq[i] == ' -' )
33
+ {
34
+ number.push_back (v);
35
+ op.push_back (dq[i]);
36
+ v = 0 ;
37
+ ++i;
38
+ flag = false ;
39
+ }
40
+ else
41
+ {
42
+ char c = dq[i];
43
+ ++i;
44
+ int v2 = 0 ;
45
+ while (i < n && dq[i] >= ' 0' && dq[i] <= ' 9' )
46
+ {
47
+ v2 = v2*10 + (dq[i]-' 0' );
48
+ ++i;
49
+ }
50
+ if (c == ' *' )
51
+ v *= v2;
52
+ else
53
+ v /= v2;
54
+ flag = true ;
55
+ }
56
+ }
57
+ }
58
+ if (flag)
59
+ number.push_back (v);
60
+
61
+ int k = op.size ();
62
+ int j = 0 ;
63
+ int sum = number[0 ];
64
+ while (j < k)
65
+ {
66
+ if (op[j] == ' +' )
67
+ sum += number[j+1 ];
68
+ else
69
+ sum -= number[j+1 ];
70
+ ++j;
71
+ }
72
+
73
+ return sum;
74
+ }
Original file line number Diff line number Diff line change
1
+ ListNode* reverseKGroup (ListNode* head, int k) {
2
+ if (head == nullptr || head->next == nullptr || k == 1 )
3
+ return head;
4
+
5
+ int sz = 0 ;
6
+ ListNode* tmp = head;
7
+ while (tmp != nullptr )
8
+ {
9
+ tmp = tmp->next ;
10
+ ++sz;
11
+ }
12
+
13
+ int q = sz/k;
14
+ int r = sz - q*k;
15
+ int i = 1 , n = 0 ;
16
+ ListNode* h = nullptr ;
17
+ ListNode* tail = nullptr ;
18
+ ListNode* ps = head, *pds = head, *pde = head;
19
+ ps = ps->next ;
20
+ while (i < k)
21
+ {
22
+ ListNode* pp = ps->next ;
23
+ ps->next = pds;
24
+ pds = ps;
25
+ ps = pp;
26
+ ++i;
27
+ }
28
+ h = pds;
29
+ ++n;
30
+ tail = pde;
31
+
32
+ while (n < q)
33
+ {
34
+ pds = ps;
35
+ pde = ps;
36
+ i = 1 ;
37
+ ps = ps->next ;
38
+ while (i < k)
39
+ {
40
+ ListNode* pp = ps->next ;
41
+ ps->next = pds;
42
+ pds = ps;
43
+ ps = pp;
44
+ ++i;
45
+ }
46
+ tail->next = pds;
47
+ tail = pde;
48
+ ++n;
49
+ }
50
+
51
+ tail->next = ps;
52
+ return h;
53
+ }
Original file line number Diff line number Diff line change
1
+ vector<vector<int >> insert (vector<vector<int >>& intervals, vector<int >& newInterval) {
2
+ vector<vector<int >> res;
3
+ int len = intervals.size ();
4
+ if (len == 0 )
5
+ {
6
+ res.push_back (newInterval);
7
+ return res;
8
+ }
9
+
10
+ int pos[2 ] = {-1 ,-1 };
11
+ for (int i = 0 ; i < 2 ; ++i)
12
+ {
13
+ int j = 0 ;
14
+ for (; j < len; ++j)
15
+ {
16
+ if (newInterval[i] <= intervals[j][1 ])
17
+ {
18
+ pos[i] = j;
19
+ break ;
20
+ }
21
+ }
22
+ if (pos[i] == -1 )
23
+ pos[i] = len;
24
+ }
25
+
26
+ if (pos[0 ] == pos[1 ])
27
+ {
28
+ if (pos[0 ] == len || newInterval[1 ] < intervals[pos[0 ]][0 ])
29
+ {
30
+ res.reserve (len+1 );
31
+ for (int i = 0 ; i < pos[0 ]; ++i)
32
+ res.push_back (intervals[i]);
33
+ res.push_back (newInterval);
34
+ for (int i = pos[0 ]; i < len; ++i)
35
+ res.push_back (intervals[i]);
36
+ return res;
37
+ }
38
+ else
39
+ {
40
+ intervals[pos[0 ]][0 ] = newInterval[0 ] < intervals[pos[0 ]][0 ] ? newInterval[0 ] : intervals[pos[0 ]][0 ];
41
+ return intervals;
42
+ }
43
+ }
44
+ else
45
+ {
46
+ for (int i = 0 ; i < pos[0 ]; ++i)
47
+ res.push_back (intervals[i]);
48
+ int lh = newInterval[0 ] < intervals[pos[0 ]][0 ] ? newInterval[0 ] : intervals[pos[0 ]][0 ];
49
+ if (pos[1 ] == len || newInterval[1 ] < intervals[pos[1 ]][0 ])
50
+ {
51
+ res.push_back ({lh, newInterval[1 ]});
52
+ for (int i = pos[1 ]; i < len; ++i)
53
+ res.push_back (intervals[i]);
54
+ }
55
+ else
56
+ {
57
+ res.push_back ({lh, intervals[pos[1 ]][1 ]});
58
+ for (int i = pos[1 ]+1 ; i < len; ++i)
59
+ res.push_back (intervals[i]);
60
+ }
61
+
62
+ return res;
63
+ }
64
+ }
You can’t perform that action at this time.
0 commit comments