Skip to content

Commit 5417562

Browse files
committed
6 problems solved.
1 parent 243fef6 commit 5417562

File tree

6 files changed

+303
-0
lines changed

6 files changed

+303
-0
lines changed

src/116.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
}

src/117.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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+
}

src/1893.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
}

src/227.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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+
}

src/25.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
}

src/57.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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+
}

0 commit comments

Comments
 (0)